4
0
Fork 0
dcat-admin-goods/src/Models/Goods.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);
}
}