107 lines
2.8 KiB
PHP
107 lines
2.8 KiB
PHP
<?php
|
|
|
|
namespace Peidikeji\Goods\Models;
|
|
|
|
use Dcat\Admin\Models\Administrator;
|
|
use Dcat\Admin\Traits\HasDateTimeFormatter;
|
|
use EloquentFilter\Filterable;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
use Illuminate\Support\Str;
|
|
use Peidikeji\Goods\Filters\GoodsFilter;
|
|
use Peidikeji\Merchant\Enums\CheckStatus;
|
|
use Peidikeji\Merchant\Models\Merchant;
|
|
|
|
class Goods extends Model
|
|
{
|
|
use Filterable, HasDateTimeFormatter;
|
|
|
|
protected $table = 'goods';
|
|
|
|
protected $fillable = [
|
|
'merchant_id', 'category_id', 'type_id', 'brand_id',
|
|
'goods_sn', 'name', 'cover_image', 'description', 'content',
|
|
'price', 'vip_price', 'score_max_amount', 'on_sale', 'is_recommend', 'sold_count', 'stock',
|
|
'weight', 'volume', 'shipping_tmp_id',
|
|
'attr', 'part', 'spec',
|
|
'check_user_id', 'check_at', 'check_remarks', 'check_status',
|
|
];
|
|
|
|
protected $casts = [
|
|
'attr' => 'array',
|
|
'spec' => 'array',
|
|
'part' => 'array',
|
|
'content' => 'array',
|
|
'images' => 'array',
|
|
'check_status' => CheckStatus::class,
|
|
];
|
|
|
|
protected $dates = ['check_at'];
|
|
|
|
protected static function booted()
|
|
{
|
|
static::creating(function ($model) {
|
|
if (! $model->goods_sn) {
|
|
$model->goods_sn = Str::uuid();
|
|
}
|
|
});
|
|
static::updating(function (Goods $model) {
|
|
if ($model->isDirty(['merchant_id', 'category_id', 'brand_id', 'goods_sn', 'name', 'cover_image', 'description', 'content', 'price', 'vip_price']) && $model->check_status === CheckStatus::Success) {
|
|
$model->check_status = CheckStatus::None;
|
|
$model->check_at = null;
|
|
$model->check_user_id = null;
|
|
$model->check_remarks = null;
|
|
}
|
|
});
|
|
}
|
|
|
|
public function modelFilter()
|
|
{
|
|
return GoodsFilter::class;
|
|
}
|
|
|
|
public function category()
|
|
{
|
|
return $this->belongsTo(GoodsCategory::class, 'category_id');
|
|
}
|
|
|
|
public function merchant()
|
|
{
|
|
return $this->belongsTo(Merchant::class, 'merchant_id');
|
|
}
|
|
|
|
public function type()
|
|
{
|
|
return $this->belongsTo(GoodsType::class, 'type_id');
|
|
}
|
|
|
|
public function brand()
|
|
{
|
|
return $this->belongsTo(GoodsBrand::class, 'brand_id');
|
|
}
|
|
|
|
public function checkUser()
|
|
{
|
|
return $this->belongsTo(Administrator::class, 'check_user_id');
|
|
}
|
|
|
|
public function skus()
|
|
{
|
|
return $this->hasMany(GoodsSku::class, 'goods_id');
|
|
}
|
|
|
|
public function checkLogs()
|
|
{
|
|
return $this->hasMany(GoodsCheck::class, 'goods_id');
|
|
}
|
|
|
|
public function scopeSort($q)
|
|
{
|
|
return $q->orderBy('created_at', 'desc');
|
|
}
|
|
|
|
public function scopeShow($q)
|
|
{
|
|
return $q->where('on_sale', 1)->where('check_status', CheckStatus::Success);
|
|
}
|
|
}
|