如何在hasMany关系上同步子表数据?

问题描述

我有2个表variantspublic function variants() { return $this->hasMany(Variant::class); } ,具有 hasMany 关系,结构如下:

产品型号

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);
}

我可以将产品模型的 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()

manyToManyhasMany关系工作。对于select * from GLB_Course where GLB_CourseID in (Select GLB_CourseID from GLB_CourseVesselType where Deleted=0 and VesselTypeID=2) 关系,我也需要相同的条件。
我该怎么办?

解决方法

不幸的是,没有用于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);
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...