when($params['status'], function (Builder $query) use ($params) { return $query->where("status", $params['status']); })->when($params['name'], function (Builder $query) use ($params) { return $query->where("name", "like", "%{$params['name']}%"); })->orderByDesc("id")->paginate($params['page_size']); return [ "total" => $p->total(), "page_total" => $p->lastPage(), "list" => array_map(function (Goods $model) { return [ "id" => $model->id, "name" => $model->name, "thumb" => Arr::first($model->image_list), "weight" => $model->weight, "status" => $model->status, "created_at" => $model->created_at->format("Y-m-d H:i:s"), ]; }, $p->items()), ]; } public function store($params) { if ($id = Arr::get($params, "id", 0)) { $goods = Goods::findOrFail($id); } else { $goods = new Goods(); } $specIdArr = Arr::get($params, "spec", []); $notCustomSpecS = Spec::whereIn("id", $specIdArr)->where("is_custom", 0)->get(); if ($notCustomSpecS->isEmpty()) { throw new ClientException("必须要存在一个非自定义的规格"); } DB::transaction(function () use ($params, $goods, $specIdArr) { $goods->image_list = Arr::get($params, "image_list", []); $goods->spec = $specIdArr; $goods->name = Arr::get($params, "name", []); $goods->weight = Arr::get($params, "weight", 0); $goods->desc_html = Arr::get($params, "desc_html", ""); $goods->spec_attr_html = Arr::get($params, "spec_attr_html", ""); $goods->faq_html = Arr::get($params, "faq_html", ""); $goods->save(); $categoryArr = Arr::get($params, "category", []); GoodsCategoryMap::where("goods_id", $goods->id)->whereNotIn("category_id", Arr::pluck($categoryArr, "id"))->delete(); foreach ($categoryArr as $c) { /** * [ * "id" => 1 * "is_public" => 1 * ] */ GoodsCategoryMap::updateOrCreate([ "goods_id" => $goods->id, "category_id" => $c['id'], 'is_public' => $c['is_public'], ]); } $skuArr = Arr::get($params, "sku", []); $doNotDelIdArr = []; foreach ($skuArr as $c) { /** * [ * "id" => 0 * "sn" => "规格型号" * "url_3d" => null * "spec_attr" => array:2 [ * 0 => array:2 [ * "id" => 1 * "name" => "属性一" * ] * 1 => array:2 [ * "id" => 2 * "name" => "属性二" * ] * ] * "is_use" => 1 * ] */ if ($id = Arr::get($c, "id")) { $sku = GoodsSku::where("goods_id", $goods->id)->where("id", $id)->first(); } else { $sku = new GoodsSku(); $sku->goods_id = $goods->id; } $sku->sn = Arr::get($c, "sn", ""); if (empty($sku->sn)) { $sku->is_use = 0; } $sku->url_3d = Arr::get($c, "url_3d", ""); $sku->spec_attr_list = Arr::get($c, "spec_attr", []); $sku->save(); $doNotDelIdArr[] = $sku->id; } GoodsSku::where("goods_id", $goods->id)->whereNotIn("id", $doNotDelIdArr)->delete(); }); } public function info($params) { $id = $params['id']; $model = Goods::findOrFail($id); $return = [ "id" => $model->id, "image_list" => $model->image_list, "category" => $model->map->map(function (GoodsCategoryMap $map) { return [ "id" => $map->category->id, "is_public" => $map->is_public, ]; }), "spec" => $model->spec, "sku" => $model->sku->map(function (GoodsSku $sku) { return [ "id" => $sku->id, "sn" => $sku->sn, "url_3d" => $sku->url_3d, "is_use" => $sku->is_use, "spec_attr" => array_map(function ($specAttrId) { return [ "id" => $specAttrId, "name" => SpecAttr::where("id", $specAttrId)->value("name"), ]; }, $sku->spec_attr_list), ]; }), "weight" => $model->weight, "desc_html" => $model->desc_html, "spec_attr_html" => $model->spec_attr_html, "faq_html" => $model->faq_html, ]; return $return; } }