3

我有 2 个表,products并且variants具有hasMany关系,结构如下:

产品型号

public function variants()
{
   return $this->hasMany(Variant::class);
}

变体型号

public function product()
{
   return $this->belongsTo(Product::class);
}

产品表

|     id          name            image          manufacturer
|     1           T-Shirt         t-s.jpg        docomo      
|     2           Short Skirt     s-skirt.jpg    docomo  

变体表

|     id     product_id      name       price    sku       quantity
|     1         1             S          30      ts-s       100
|     2         1             M          32      ts-m       100
|     3         1             XL         35      ts-xl      100
|     4         2             S          23      sk-s       100
|     5         2             M          25      sk-m       100
|     6         2             XL         28      sk-xl      100

我可以将产品模型中变体模型(子表)的数据保存为:

public function store(Request $request)
{       
    $q = new Product;
    $q->name = $request->name;
    $q->save();
    // Below child table
    $q->variants()->createMany($request->variant);
}

我可以存储数据,但问题是,如何更新子表?[可以创建,更新或删除]我尝试了sync()方法,但没有奏效。它的manyToMany关系。

public function update(Request $request)
{       
    $q = Product::findOrFail($request->id);
    $q->name = $request->name;
    $q->save();
    // Below child table update
    // $q->variants()->sync($request->variant); // not worked
}

sync()manyToMany关系中工作。我需要同样的hasMany关系。
我怎样才能做到这一点?

4

1 回答 1

0

不幸的是,没有建立关系的sync方法。hasMany自己做很简单。您可以简单地删除行并再次将它们全部插入。

public function update(Request $request, Product $product)
{       
    $product->update(['name' => $request->name]);
    // Below child table update
    $product->variants()->delete();
    $product->variants()->sync($request->variant);
}
于 2020-08-19T12:21:16.500 回答