راکت

refactore کردن کنترلر

6 پاسخ

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

ثبت پرسش جدید

پاسخ‌ها

6
رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

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

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

شاید پاسخ شما همین‌جا باشد

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

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

sina
sina
@s.aerospace

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

رایموند
رایموند
@Raymond

تخصص: مختصص وردپرس - برنامه نویس لاراول

Hamidev
Hamidev
@hamiidev

تخصص: backend Developer | laravel | php

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

موفق باشید

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

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