首页 > 解决方案 > 需要帮助才能使其正常工作。试图将产品保存到数据库中,控制器收到信息但不保存?

问题描述

嗨,我正在使用表单创建新产品并将信息发送到控制器并将其保存到数据库中,表单确实发送数据,因为当我在控制器内执行日志时我可以看到它并且信息在那里,我不明白为什么它没有被保存到数据库中?

在这个例子中,我添加到产品中的数据很少,但可能更多的是价格和国家,以及商店功能中的东西,如标签和尺寸。

这是控制器中完整的存储功能

public function store(ProductSaveRequest $request)
    {
        DB::beginTransaction();
        $product = new Product;
        $product->fill($request->all());
        $file = $request->file('image');

        if ($file) {
            $file = $request->file('image');
            $filename = Uuid::uuid() . '.' . $file->getClientOriginalExtension();
            $file->move('img/products', $filename);
            $product->image = 'img/products/' . $filename;
        }

        $product->save();
        Log::info($product);

        if (!empty($request->get('prices'))) {
            $prices = array_map(function ($item) use ($product) {
                $item['product_id'] = $product->id;
                return $item;
            }, $request->get('prices'));
            CountryProduct::insert($prices);
        }

        if ($request->has('tags')) {
            $product->tags()->sync($request->get('tags'));
        }

        if ($request->has('sizes')) {
            $product->sizes()->sync($request->get('sizes'));
        }

        if ($request->has('categories')) {
            $productCategories = [];
            foreach ($request->get('categories') as $item) {
                if (key_exists('category_name', $item)) {
                    $category = Category::where('name', $item['category_name'])
                        ->first();
                } else if (key_exists('category_id', $item)) {
                    $category = Category::findOrFail($item['category_id']);
                }

                if (empty($category)) {
                    $category = new Category;
                    $category->name = $item['category_name'];
                }

                $category->type = $item['type'];
                $category->save();

                if (!empty($item['fields'])) {
                    foreach ($item['fields'] as $fieldItem) {
                        if (key_exists('field_name', $fieldItem)) {
                            $field = Field::where('name', $fieldItem['field_name'])
                                ->first();
                        } else if (key_exists('field_id', $fieldItem)) {
                            $field = Field::findOrFail($fieldItem['field_id']);
                        }

                        if (empty($field)) {
                            $field = new Field;
                            $field->name = $fieldItem['field_name'];
                            $field->category_id = $category->id;
                        }

                        $field->save();

                        $productCategories[] = [
                            "field_id" => $field->id,
                            "category_id" => $category->id,
                            "product_id" => $product->id,
                            "value" => $fieldItem['value']
                        ];
                    }
                }

                if (count($productCategories) > 0) {
                    ProductField::insert($productCategories);
                }

                ExportationFactor::insert($product);
            }

            $product->save();
            DB::commit();
            return $product;
        }

    }

这是 Log.info

local.INFO: {"discount":"1","code":"123","sku":"123","description_spanish":"123","description_english":"123","brand_id":"2","id":591} 

当前的输出是我得到了一个成功的操作,它说它已成功添加,但是当我去查看它时它不存在。

标签: phplaravelvue.js

解决方案


将您的commit方法放在最后一个if条件之外。

public function store(ProductSaveRequest $request)
    {
        DB::beginTransaction();
        $product = new Product;
        $product->fill($request->all());
        $file = $request->file('image');

        if ($file) {
            $file = $request->file('image');
            $filename = Uuid::uuid() . '.' . $file->getClientOriginalExtension();
            $file->move('img/products', $filename);
            $product->image = 'img/products/' . $filename;
        }

        $product->save();
        Log::info($product);

        if (!empty($request->get('prices'))) {
            $prices = array_map(function ($item) use ($product) {
                $item['product_id'] = $product->id;
                return $item;
            }, $request->get('prices'));
            CountryProduct::insert($prices);
        }

        if ($request->has('tags')) {
            $product->tags()->sync($request->get('tags'));
        }

        if ($request->has('sizes')) {
            $product->sizes()->sync($request->get('sizes'));
        }

        if ($request->has('categories')) {
            $productCategories = [];
            foreach ($request->get('categories') as $item) {
                if (key_exists('category_name', $item)) {
                    $category = Category::where('name', $item['category_name'])
                        ->first();
                } else if (key_exists('category_id', $item)) {
                    $category = Category::findOrFail($item['category_id']);
                }

                if (empty($category)) {
                    $category = new Category;
                    $category->name = $item['category_name'];
                }

                $category->type = $item['type'];
                $category->save();

                if (!empty($item['fields'])) {
                    foreach ($item['fields'] as $fieldItem) {
                        if (key_exists('field_name', $fieldItem)) {
                            $field = Field::where('name', $fieldItem['field_name'])
                                ->first();
                        } else if (key_exists('field_id', $fieldItem)) {
                            $field = Field::findOrFail($fieldItem['field_id']);
                        }

                        if (empty($field)) {
                            $field = new Field;
                            $field->name = $fieldItem['field_name'];
                            $field->category_id = $category->id;
                        }

                        $field->save();

                        $productCategories[] = [
                            "field_id" => $field->id,
                            "category_id" => $category->id,
                            "product_id" => $product->id,
                            "value" => $fieldItem['value']
                        ];
                    }
                }

                if (count($productCategories) > 0) {
                    ProductField::insert($productCategories);
                }

                ExportationFactor::insert($product);
            }

        }

        DB::commit();
        return $product;

    }

推荐阅读