سلام دوستان
اگر یک کنترلر داشته باشیم که در متد store بخواهیم همزمان توی چند تا جدول دیتا ذخیره کنیم که به هم مربوط میشن چطور میشه کدها رو ریفکتور کرد.. کد من به صورت زیره: حالا تا حد امکان کدهاش رو ریفکتور کردم.
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();
}
@endworld
@mhyeganeh
@mohammadphp
@abdolrahman
@erfanmohseni406
@meysampro
@gomnam
درود...
۱. فایل با نام دلخواه TestRequest در قسمت request ایجاد کنید:
return [
'name' => ['required', 'string', 'max:255'],
'slug' => ['required', 'string', 'max:255', 'unique:categories'],
'category_id' => ['nullable', 'exists:categories,id']
];
۲. با فراخوانی کردن TestRequest کد به شکل زیر بنویسید:
public function store(TestRequest $request)
{
Category::create(
$request->validated()
);
$notification = array(
'message' => 'دسته با موفقیت ایجاد شد',
'alert-type' => 'success'
);
return back()->with($notification);
}
سلام وقت بخیر حتما از DB Transaction ها در عملیات هایی که در چند جدول ذخیره و عملکرد هر کدوم وابسته به هم هستند مثل فانکشن فعلی شما استفاده کنید و میتونید از ریپوزیتوری ها استفاده کنید تا کنترلر خلوت تری داشته باشید
موفق باشید
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟