laravel模型一对多更新问题

product模型建立了一对多的关联关系

    //商品拥有多张缩略图
    public function images()
    {
        return $this->hasMany(ProductImage::class);
    }

新建商品一对多关联插入

 public function store(ProductPost $request)
    {
        try {
            DB::transaction(function () use ($request) {

                //插入数据到商品表
                $product = Product::create($request->all());

                //插入数据到商品描述表
                $product->description()->create([
                    'description' => $request->input('description'),
                    'editor-html-code' => $request->input('editor-html-code')
                ]);

                //插入数据到商品图片表
                $images = [];
                foreach ($request->img as $img) {
                    $images[] = new ProductImage(['image' => $img]);
                }
                $product->images()->saveMany($images);

                //插入数据到商品参数表
                $product->param()->create([
                    'param' => serialize($request->param)
                ]);

            }, 5);

        } catch (\Exception $e) {
            return back()->withInput()->with('danger', $e->getMessage());
        }
        return redirect(route('admin.mall.product.index'))->with('success', '新增商品成功');
    }

//更新商品属性

public function update(ProductPost $request,$id)
    {
        $product=Product::find($id);
        //更改商品表
        $product->update($request->all());

        //更改商品描述表
        $product->description()->update([
            'description' => $request->input('description'),
            'editor-html-code' => $request->input('editor-html-code')
        ]);

        //更改商品图片表
        $product->images()->update([
            //????????
        ]);

        //更改商品参数
        $product->param()->update([
            'param' => serialize($request->param)
        ]);

    }

插入的时候使用了SaveMany的方法插入,那么现在关联更新应该使用什么方法进行更新呢?我看文档只有说道belongsto的更新方法,没有提到hasMany的更新方法.

阅读 4.8k
1 个回答

对于这种一对多关系的更新,无非就两种方式

1、简单粗暴,删除原来的数据,从新新增。因为更新前后,不一定是每个images的内容发生变化,还有可能涉及到关联的images的个数的变更。

2、如果只是更新内容,根据前端上传的内容获取到对应的images对象然后逐个更新

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题