erp/app/Http/Controllers/Goods/GoodsController.php

80 lines
2.6 KiB
PHP
Raw Normal View History

2022-07-28 13:46:08 +08:00
<?php
namespace App\Http\Controllers\Goods;
use App\Http\Controllers\Controller;
use App\Http\Resources\GoodsResource;
use App\Http\Resources\GoodsSkuResource;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;
use App\Models\Goods;
use App\Models\GoodsSku;
class GoodsController extends Controller
{
public function index(Request $request)
{
$goods = GoodsSku::query()
->with(['goods' => function($query) {
}])
->paginate();
return GoodsSkuResource::collection($goods);
}
public function store(Request $request)
{
$validator = Validator::make($request->all(), [
'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'],
'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', 'max:10'],
'skus.*.cost' => ['required', 'numeric', 'max:10'],
]);
if ($validator->fails()) {
$this->res = [
'httpCode' => 400,
'errorCode' => 400416,
'errorMessage' => $validator->getMessageBag()->getMessages(),
];
goto end;
}
DB::beginTransaction();
try {
$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;
}
$goods->skus()->createMany($goodsSkus);
DB::commit();
} catch (\Exception $exception) {
DB::rollBack();
$this->res = [
'httpCode' => 400,
'errorCode' => 400416,
'errorMessage' => $exception->getMessage(),
];
}
end:
return response($this->res, $this->res['httpCode']);
}
}