You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
2.6 KiB
115 lines
2.6 KiB
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use App\Common\ProductStatus;
|
|
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
|
use Illuminate\Database\Eloquent\SoftDeletes;
|
|
|
|
class AgentProduct extends BaseModel
|
|
{
|
|
use HasFactory, SoftDeletes;
|
|
|
|
protected $guarded = ['id'];
|
|
protected $casts = ['extends' => 'json'];
|
|
|
|
public function product()
|
|
{
|
|
return $this->belongsTo(Product::class);
|
|
}
|
|
|
|
public function coupon()
|
|
{
|
|
return $this->hasMany(Coupon::class);
|
|
}
|
|
|
|
public function agent()
|
|
{
|
|
return $this->belongsTo(Agent::class)->withTrashed();
|
|
}
|
|
|
|
public function category()
|
|
{
|
|
return $this->belongsTo(Category::class);
|
|
}
|
|
|
|
public function user()
|
|
{
|
|
return $this->hasOne(User::class, 'id', 'verifier');
|
|
}
|
|
|
|
public function guide()
|
|
{
|
|
return $this->belongsTo(Guide::class)->withTrashed();
|
|
}
|
|
|
|
public function item()
|
|
{
|
|
return $this->hasMany(AgentProductItem::class);
|
|
}
|
|
|
|
public function agentCloudProduct()
|
|
{
|
|
return $this->belongsTo(self::class, 'agent_cloud_pid', 'id');
|
|
}
|
|
|
|
public function setChannelIdAttribute($value)
|
|
{
|
|
$this->attributes['channel_id'] = is_array($value) ? join(',', array_filter($value)) : $value;
|
|
}
|
|
|
|
public function setPicturesAttribute($value)
|
|
{
|
|
$this->attributes['pictures'] = is_array($value) ? (json_encode(array_filter($value)) ?? '[]') : '[]';
|
|
}
|
|
|
|
public function setProductIdsAttribute($value)
|
|
{
|
|
$this->attributes['product_ids'] = is_array($value) ? join(',', array_filter($value)) : $value;
|
|
}
|
|
|
|
// 获取所有产品图片
|
|
public function getPicturesAttribute($value): array
|
|
{
|
|
if (is_string($value)) {
|
|
$value = $value ? json_decode($value, true) : [];
|
|
}
|
|
$this->append('picture');
|
|
return $value ?? [];
|
|
}
|
|
|
|
// 获取第一张产品图片
|
|
public function getPictureAttribute($value): string
|
|
{
|
|
return $this->pictures[0] ?? '';
|
|
}
|
|
|
|
//列表查询统一查询条件
|
|
public static function list($agent_id)
|
|
{
|
|
return static::withoutGlobalScope('orderById')
|
|
->whereDoesntHave('agentProductItem', function ($query) {
|
|
return $query->whereHas('product', function ($query) {
|
|
return $query->where('stock', '<=', 0)->orWhere('status', '<>', ProductStatus::ON_SALE);
|
|
});
|
|
})
|
|
->where('stock', '>', 0)->where(['agent_id' => $agent_id, 'status' => ProductStatus::ON_SALE])
|
|
->select('id', 'sale', 'product_id', 'price', 'original_price', 'title', 'pictures');
|
|
}
|
|
|
|
public function agentProductItem()
|
|
{
|
|
return $this->hasOne(AgentProductItem::class);
|
|
}
|
|
|
|
public function spec()
|
|
{
|
|
return $this->hasMany(AgentProductSpec::class);
|
|
}
|
|
|
|
//自营产品信息收集表
|
|
public function diyForm()
|
|
{
|
|
return $this->belongsTo(DiyForm::class);
|
|
}
|
|
}
|