【发布时间】:2021-05-21 13:51:46
【问题描述】:
我正在制作一个用户可以编辑步骤的 VueJS 表单。一个步骤可以有许多父产品。逻辑是一个步骤可以属于多个产品。我有一个名为 products、product_step(pivot table) 和 steps 的表。
用户第一次加载页面时的数组中填充了此步骤拥有的父产品。
这个数组会根据用户决定在前端做什么而改变。假设他们希望该产品 n 不再有权访问此步骤。在这种情况下,产品将从数组中删除。
我面临的问题是,我不知道如何将数据透视表同步到这种行为。
场景
假设用户加载页面并且此步骤具有的父产品是[101,102]。该步骤的 ID 为 2。数据透视表如下所示
假设用户决定删除产品101 并添加产品104 和106。然后数组看起来像这样[101, 104, 106] 但是数据透视表也需要同步这个行为。我怎样才能做到这一点?
我尝试过类似的方法,但这样只能将其分离,不能在必要时添加
public function update(Request $request, $id)
foreach($request->data['parentProducts'] as $configurableProduct) {
$product = Product::find($configurableProduct['id']);
$product->steps()->detach($id);
}
}
产品型号
/**
* @return \Illuminate\Database\Eloquent\Relations\BelongsToMany
*/
public function steps()
{
return $this->belongsToMany(Step::class, 'product_step', 'product_id', 'step_id')->orderBy('order');
}
【问题讨论】:
-
查看文档:laravel.com/docs/8.x/…。您可以致电
$product->steps()->sync($ids)或$step->products()->sync($ids)。 Sync 将附加在$ids中找到的 id,并分离任何不是的。
标签: php database laravel eloquent pivot