راکت
sina
sina
توسط sina مطرح شد
6 پاسخ

refactore کردن کنترلر

سلام دوستان
اگر یک کنترلر داشته باشیم که در متد 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


ثبت پرسش جدید
رایموند
رایموند
تخصص :مختصص وردپرس - برنامه نویس لاراول
@Raymond4 سال پیشمطرح شد
0

درود...
۱. فایل با نام دلخواه 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);
    }

sina
sina
@s.aerospace4 سال پیشمطرح شد
0

@endworld
اگر همزمان چند جدول را بخوایم سیو کنیم چی؟


رایموند
رایموند
تخصص :مختصص وردپرس - برنامه نویس لاراول
@Raymond4 سال پیشمطرح شد
0

@s.aerospace
در مدل یا کنترلر؟


sina
sina
@s.aerospace4 سال پیشمطرح شد
0

@endworld
توی کنترلر همونطور که تو کدهای بالا نوشتم


رایموند
رایموند
تخصص :مختصص وردپرس - برنامه نویس لاراول
@Raymond4 سال پیشمطرح شد
Hamidev
Hamidev
تخصص :backend Developer | laravel | php
@hamiidev4 سال پیشمطرح شد
0

سلام وقت بخیر حتما از DB Transaction ها در عملیات هایی که در چند جدول ذخیره و عملکرد هر کدوم وابسته به هم هستند مثل فانکشن فعلی شما استفاده کنید و میتونید از ریپوزیتوری ها استفاده کنید تا کنترلر خلوت تری داشته باشید

موفق باشید


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام