'array', 'spec' => 'array', 'tags' => 'array', ]; protected $appends = [ 'month_sales', 'cart_num', 'is_effective', 'noneffective_note', 'details_imgs_url', 'goods_name', 'activity_type' ]; protected function boot(): void { parent::boot(); self::addGlobalScope('normal', function (Builder $builder) { $builder->where([$this->getTable().'.on_sale' => GoodsConstants::ON_SALE_YES]); }); } public function getActivityTypeAttribute() { return 1; } public function scopeOrderByDefault($query, $sort) { return $query->orderBy($this->getTable().'.sort', $sort)->orderBy($this->getTable().'.id', $sort); } public function scopeOrderBySales($query, $sort) { return $query->orderBy($this->getTable().'.sales', $sort); } public function scopeOrderByPrice($query, $sort) { return $query->orderBy($this->getTable().'.price', $sort); } public function getCoverImgAttribute($value) { if(!empty($value)) { return $this->attachmentService->switchImgToAliOss($value, OssThumbnail::THUMBNAIL_600_Q90); }else{ return ''; } } public function getMonthSalesAttribute() { $ssdb = ApplicationContext::getContainer()->get(SSDBTask::class); return (integer)$ssdb->exec('get', SsdbKeys::GOODS_MONTH_SALES.date('Ym').'_1_'.$this->id); } public function getCartNumAttribute() { return 0; // $userId = $this->request->user->id ?? 0; // return $userId ? (integer)$this->shopCartService->check($userId, $this->id,1) : 0; } public function getIsEffectiveAttribute() { return 1; } public function getNoneffectiveNoteAttribute() { return ''; } public function getDetailsImgsUrlAttribute() { $details_imgs = $this->details_imgs; return collect($details_imgs)->map(function($item) { return $this->attachmentService->switchImgToAliOss($item); }); } public function getGoodsNameAttribute() { return $this->attributes['name']; } public function getNameAttribute($value) { return $value . ' ' . $this->attributes['goods_unit']; } public function store() { return $this->belongsTo(Store::class, 'store_id', 'id'); } public function carts() { return $this->morphMany(ShoppingCart::class, 'goods'); } public function setTagsAttribute($value) { $this->attributes['tags'] = json_encode(json_decode($value, true)); } public function setSpecAttribute($value) { $this->attributes['spec'] = json_encode(json_decode($value, true)); } public function banner() { return $this->hasMany(GoodsBanner::class, 'goods_id','id'); } /** * add:2022-04-11,获取产品毛重,主要用于计算顺丰运费 */ public function getWeightAttribute($value): int { if (empty($value) && !empty($this->attributes['goods_unit'])) { $goods_unit = $this->attributes['goods_unit']; switch (true) { case preg_match('/(\d{2,})\D*±(\d{2,})/', $goods_unit, $matches): array_shift($matches); $value = (int)max($matches); break; case preg_match_all('/(\d{2,})[g|克]/', $goods_unit, $matches): $value = (int)max($matches[1]); break; default: $value = 0; } } return $value ?: 300; // 如果获取不到重量,默认为300g } }