log = new LogModel([ 'module' => 'goods', 'action' => $request->getMethod(), 'target_type' => 'goods_sku', ]); } public function index(Request $request) { $goods = Goods::query()->get(['id', 'title', 'img_url', 'type_id', 'brand_id', 'goods_code']); return GoodsResource::collection($goods); } public function store(Request $request) { $goodsRules = [ 'title' => ['required', 'string', 'max:255'], 'img_url' => ['required', 'string', 'max:255'], 'type_id' => ['required', 'integer', 'exists:goods_types,id'], 'brand_id' => ['integer', 'exists:goods_brands,id'], 'goods_code' => ['required', 'alpha_dash', 'max:32', 'unique:goods,goods_code'], ]; if ($useGoods = !empty($request->goods_id)) { $goodsRules = [ 'goods_id' => ['required', 'integer', 'exists:goods,id'], ]; } $skuRules = [ 'skus' => ['required', 'array'], 'skus.*.title' => ['required', 'string', 'max:255'], 'skus.*.sku_code' => ['required', 'distinct', 'alpha_dash', 'max:32'], 'skus.*.status' => ['required', 'integer', Rule::in([0, 1, 2])], 'skus.*.num' => ['required', 'integer'], 'skus.*.cost' => ['required', 'numeric'], ]; $validator = Validator::make($request->all(), array_merge($goodsRules, $skuRules)); if ($validator->fails()) { $this->setValidatorFailResponse($validator->getMessageBag()->getMessages()); return response($this->res, $this->res['httpCode']); } DB::beginTransaction(); try { if ($useGoods) { $goods = Goods::query()->find($request->goods_id); } else { $goods = new Goods(); $goods->title = $request->title; $goods->img_url = $request->img_url; $goods->type_id = $request->type_id; $goods->brand_id = $request->brand_id; $goods->goods_code = $request->goods_code; $goods->save(); } $goodsSkus = []; foreach ($request->skus as $item) { $item['goods_id'] = $goods->id; $goodsSkus[] = $item; } $collection = $goods->skus()->createMany($goodsSkus); DB::commit(); $this->setAfterUpdate($collection->toArray()); $this->addLog(0, 'add'); } catch (\Exception $exception) { DB::rollBack(); $this->res = [ 'httpCode' => 400, 'errorCode' => 400416, 'errorMessage' => $exception->getMessage(), ]; } return response($this->res, $this->res['httpCode']); } }