【发布时间】:2022-01-16 19:50:42
【问题描述】:
我正在尝试重构我的代码。我的问题是:如何重构一个同时将数据保存在多个表中的方法?
我认为编写这段代码是必不可少的。另一方面,它对于控制器的方法来说太长了。我可以将其中一些移动到模型中吗?
我有一个product,它与Price、specials、maintenance等有一些关系。
public function store(AddProductRequest $request)
{
$shopperId = 1;
$product = new Product([
'title' => $request->title,
'slug' => to_slug_fa($request->title, Product::class),
'detail' => $request->detail,
'color_id' => $request->colorId,
'category_id' => $request->categoryId,
'img' => $request->img,
'description' => $request->description,
]);
$category = Category::find($request->categoryId);
$category->Product()->save($product);
$code = create_code($request->categoryId, $product['id'], $request->colorId);
$product->update(['code' => $code]);
$price = new Price([
'price' => $request->price,
'product_id' => $product->id,
]);
$product->price()->save($price);
$stocks = [];
foreach ($request->sizeIds as $value) {
if ($request->quantity[$value] != null) {
$stocks[] = new Stock([
'stock' => $request->quantity[$value],
'product_id' => $product->id,
'size_id' => $value,
'shopper_id' => $shopperId,
]);
}
}
$product->stock()->saveMany($stocks);
$productAttributes = [];
foreach ($request->attributeIds as $value) {
if (isset($request->productAttribute[$value])) {
$productAttributes[] = new ProductAttribute([
'product_id' => $product->id,
'attribute_id' => $value,
'value' => $request->productAttribute[$value],
]);
}
}
$product->ProductAttribute()->saveMany($productAttributes);
$productDetail = [];
foreach ($request->productDetails as $value) {
if (isset($value)) {
$productDetail[] = new ProductDetail([
'description' => $value,
'parent_id' => $product->id,
]);
}
}
$product->ProductDetail()->saveMany($productDetail);
$product_Maintenance = [];
foreach ($request->productMaintenance as $value) {
if (isset($value)) {
$product_Maintenance[] = new ProductMaintenance([
'description' => $value,
'parent_id' => $product->id,
]);
}
}
$product->ProductMaintenance()->saveMany($product_Maintenance);
return back();
}
【问题讨论】: