TimestampBehavior::class, 'attributes' => [ ActiveRecord::EVENT_BEFORE_INSERT => ['created_at'], ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'] ] ] ]; } /** * @inheritdoc */ public function rules() { return [ [['store_id','user_id', 'goods_id', 'virtual_sales', 'cloud_inventory_cat_id', 'num'], 'integer'], [['price','platform_price'], 'number'], [['attr','pic','name'], 'string'], [['created_at', 'updated_at'], 'safe'] ]; } /** * @inheritdoc */ public function attributeLabels() { return [ 'id' => 'ID', 'user_id' => '用户id', 'store_id' => '商城id', 'goods_id' => '商品id', 'name' => '商品名称', 'virtual_sales' => '销量', 'cloud_inventory_cat_id' => '云库存商品类别', 'attr' => '规格', 'price' => '售价', 'platform_price' => '平台价', 'num' => '库存', 'pic' => '商品缩略图', 'created_at' => '', 'updated_at' => '' ]; } public function beforeSave($insert) { if (parent::beforeSave($insert)) { $goods_price = $this->price; $goods_num = $this->goods_num; $this->getPriceNum($goods_price, $goods_num); $this->price = $goods_price; $this->goods_num = $goods_num; return true; } } public function getPriceNum(&$goods_price, &$goods_num) { $attr = $this->attr; if (!empty($attr)) { $num = 0; $attr_rows = json_decode($attr, true); foreach ($attr_rows as $attr_row) { $num += intval($attr_row['num']); } $goods_num = $num; $price_arr = array_column($attr_rows, 'price'); $goods_price = min($price_arr); } } /** * 获取商品可选的规格列表 */ public function getAttrGroupList($use_attr = 1) { $attr_rows = json_decode($this->attr, true); if (empty($attr_rows)) { return []; } $attr_group_list = []; foreach ($attr_rows as $attr_row) { foreach ($attr_row['attr_list'] as $i => $attr) { $attr_id = $attr['attr_id']; $attr = Attr::findOne(['id' => $attr_id, 'is_delete' => 0]); if (!$attr) { continue; } $in_list = false; foreach ($attr_group_list as $j => $attr_group) { if ($attr_group->attr_group_id == $attr->attr_group_id) { $attr_obj = (object)[ 'attr_id' => $attr->id, 'attr_name' => $attr->attr_name, ]; if (!in_array($attr_obj, $attr_group_list[$j]->attr_list)) { $attr_group_list[$j]->attr_list[] = $attr_obj; } $in_list = true; continue; } } if (!$in_list) { $attr_group = AttrGroup::findOne(['is_delete' => 0, 'id' => $attr->attr_group_id]); if ($attr_group) { $attr_group_list[] = (object)[ 'attr_group_id' => $attr_group->id, 'attr_group_name' => $attr_group->attr_group_name, 'attr_list' => [ (object)[ 'attr_id' => $attr->id, 'attr_name' => $attr->attr_name, ], ], ]; } } } } if ((int)$use_attr === 0) { $attr_group_list = [ $attr_group_list[0] ]; } return $attr_group_list; } }