sina
3 سال پیش توسط 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


ثبت پرسش جدید
رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش مطرح شد
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
@s.aerospace 3 سال پیش مطرح شد
0

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


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

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


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

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


رایموند
تخصص : مختصص وردپرس - برنامه نویس لار...
@Raymond 3 سال پیش مطرح شد
Hamidev
تخصص : backend Developer | laravel |...
@hamiidev 3 سال پیش مطرح شد
0

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

موفق باشید


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

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