'integer', 'purchase_id' => 'integer', 'bill_id' => 'integer', 'store_id' => 'integer', 'product_id' => 'integer', 'category_id' => 'integer', 'supplier_id' => 'integer', 'price' => 'decimal:2', 'shelf_life' => 'integer', 'quantity' => 'integer', 'weight' => 'decimal:3', 'amount' => 'decimal:2', 'cost_price' => 'decimal:2', ]; /** * 成本价属商业敏感数据,默认不随 toArray 输出(防止泄漏到小程序端); * 后台管理接口需在查询结果上调用 makeVisible('cost_price') 恢复。 */ protected $hidden = ['cost_price']; /** 明细可编辑状态:待接单、已接单、采购中、配送中(已完成/已取消锁定) */ public const array ITEM_EDITABLE_STATUS = [ StoreOrderModel::STATUS_PENDING, StoreOrderModel::STATUS_SUMMARIZED, StoreOrderModel::STATUS_DELIVERING, StoreOrderModel::STATUS_DISTRIBUTION, ]; /** * 商品图片ID(逗号分隔字符串 ↔ 数组) */ public function imageIds(): Attribute { return Attribute::make( get: fn ($value) => $value === '' || $value === null ? [] : explode(',', (string) $value), set: fn ($value) => is_array($value) ? implode(',', $value) : $value, ); } /** * 所属订单 */ public function order(): BelongsTo { return $this->belongsTo(StoreOrderModel::class, 'order_id', 'id'); } /** * 下单门店 */ public function store(): BelongsTo { return $this->belongsTo(StoreModel::class, 'store_id', 'id'); } /** * 下单商品 */ public function product(): BelongsTo { return $this->belongsTo(ProductModel::class, 'product_id', 'id'); } /** * 供应商 */ public function supplier(): BelongsTo { return $this->belongsTo(SupplierModel::class, 'supplier_id', 'id'); } /** * 快照商品分类 */ public function category(): BelongsTo { return $this->belongsTo(ProductCategoryModel::class, 'category_id', 'id'); } }