md_id){ if(is_array($this->md_id)){ $md_ids = $this->md_id; }else{ $md_ids = [$this->md_id]; } } foreach ($this->goods_ids as $goods_id) { $goods = Goods::findOne($goods_id); if (!empty($goods)) { $query = Md::find()->where(['store_id' => $goods->store_id, 'is_delete' => 0]); if(!empty($md_ids)){ $query->andWhere(['id' => $md_ids]); } $md_list = $query->asArray()->all(); foreach ($md_list as $md_item) { $is_single = intval($md_item['is_single']); if($is_single){ $md_goods = MdGoods::findOne(['goods_id' => $goods_id, 'md_id' => $md_item['id']]); if (empty($md_goods)) { $md_goods = new MdGoods(); $md_goods->md_id = $md_item['id']; $md_goods->goods_id = $goods_id; $md_goods->attr = $goods->attr; $md_goods->virtual_sales = $goods->virtual_sales; $md_goods->price = $goods->price; $md_goods->status = 1; $md_goods->delivery_type = $md_item['self_delivery_type']; $md_goods->goods_num = $goods->goods_num; $md_goods->delivery_type = $goods->delivery_type; if (!$md_goods->save()) { return [ 'code' => 1, 'msg' => json_encode($md_goods->errors) ]; } } else { $md_goods_attr = json_decode($md_goods->attr, true); $goods_attr = json_decode($goods->attr, true); $array_attr = []; foreach ($goods_attr as $goods_attr_index => $goods_attr_item) { $array_attr[$goods_attr_index] = $goods_attr_item; $goods_attr_id = array_column($goods_attr_item['attr_list'], 'attr_id'); sort($goods_attr_id); foreach ($md_goods_attr as $md_goods_attr_item) { $md_goods_attr_id = array_column($md_goods_attr_item['attr_list'], 'attr_id'); sort($md_goods_attr_id); if (empty(array_diff($md_goods_attr_id, $goods_attr_id))) { if ($goods->product_type == 0 || $goods->md_food_id != 0) { $array_attr[$goods_attr_index]['price'] = $md_goods_attr_item['price']; $array_attr[$goods_attr_index]['num'] = $md_goods_attr_item['num']; } } } } $md_goods->attr = json_encode($array_attr, JSON_UNESCAPED_UNICODE); // if (!$is_single) { // $md_goods->goods_num = $goods->goods_num; // $md_goods->price = $goods->price; // } $md_goods->virtual_sales = $goods->virtual_sales; $md_goods->save(); } }else{ MdGoods::deleteAll(['md_id' => $md_item['id']]); } } } } } }