$item) { if (in_array($item[$key], $tmp_arr)) { $re = array_search($item[$key], $tmp_arr); unset($tmp_arr[$re]); } $tmp_arr[$k] = $item[$key]; } foreach ($tmp_arr as $k => $item) { if (array_key_exists($k, $arr)) { $tmp[] = $arr[$k]; } } } //批量更新 public function save() { if (!$this->validate()) { return $this->getModelError(); }; try { while (Cart::cacheStatusGet()) { } Cart::cacheStatusSet(true); $info = json_decode($this->list, true); if (!$info) { throw new \Exception('数据为空'); } //去重 $this->secondArrayUniqueBykey($info, 'attr', $list); $array = []; $t = \Yii::$app->db->beginTransaction(); foreach ($list as $item) { $goodsAttr = $this->getGoodsAttr($item); if (!$goodsAttr) { continue; } if ($goodsAttr->stock < $item['num']) { throw new \Exception('库存不足'); } $form = Cart::findOne([ 'goods_id' => $item['goods_id'], 'user_id' => $this->user_id, 'attr_id' => $item['attr'], 'is_delete' => 0 ]); if (isset($form) && $item['num'] > 0) { $form->num = $item['num']; $form->save(); continue; } elseif (isset($form) && $item['num'] == 0) { $form->is_delete = 1; $form->save(); continue; } if ($item['num'] > 0) { $array[] = [ $this->cx_mch_id, $this->user_id, $item['attr'], $item['goods_id'], $item['num'], $this->plugin_sign, 0, time(), time(), time(), ]; } } if (isset($array)) { \Yii::$app->db->createCommand() ->batchInsert( Cart::tableName(), [ 'cx_mch_id', 'user_id', 'attr_id', 'goods_id', 'num', 'plugin_sign', 'is_delete', 'created_at', 'updated_at', 'deleted_at' ], $array ) ->execute(); } $t->commit(); return $this->apiReturnSuccess(); } catch (\Exception $e) { return $this->apiReturnError($e->getMessage()); } } protected function getGoodsAttr($item) { return GoodsAttr::find()->alias('c')->where([ 'c.goods_id' => $item['goods_id'], 'c.id' => $item['attr'], 'c.is_delete' => 0, ]) ->innerJoinWith('goods') ->one(); } public function __destruct() { Cart::cacheStatusSet(false); } }