Laravel - 根据数组同步枢轴 table
Laravel - Sync pivot table according to array
我正在制作一个 VueJS 表单,用户可以在其中编辑步骤。一个步骤可以有多个父产品。逻辑是一个步骤可以属于多个产品。我有一个名为 products、product_step(pivot table) 和 steps 的 table。
用户第一次加载页面时的数组填充了该 stap 的父产品。
这个数组根据用户决定在前端做什么而改变。假设他们希望产品 n 不再有权访问此步骤。在这种情况下,产品将从数组中删除。
我面临的问题是,我不知道如何将 Pivot table 同步到此行为。
场景
假设用户加载了页面,并且此步骤包含的父产品是 [101,102]
。步骤的 ID 是 2。Pivot table 想要以下
假设用户决定删除产品 101
并添加产品 104
和 106
。然后数组看起来像这样 [101, 104, 106]
但枢轴 table 也需要同步此行为。我怎样才能做到这一点?
我试过类似的方法,但这样它只能分离它,而不是在必要时添加
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');
}
改变你的逻辑并不能解决你的问题。这将在给定步骤中分离和添加产品,我猜这是用户实际编辑的内容?
$step = Step::find($id);
$step->products()->sync(collect($request->data['parentProducts'])->pluck('id'));
Bonus points,你还可以使用模型绑定,为你的Step,让代码更干净。要求路由参数调用step.
public function update(Request $request, Step $step)
$step->products()->sync(collect($request->data['parentProducts'])->pluck('id'));
}
我正在制作一个 VueJS 表单,用户可以在其中编辑步骤。一个步骤可以有多个父产品。逻辑是一个步骤可以属于多个产品。我有一个名为 products、product_step(pivot table) 和 steps 的 table。
用户第一次加载页面时的数组填充了该 stap 的父产品。
这个数组根据用户决定在前端做什么而改变。假设他们希望产品 n 不再有权访问此步骤。在这种情况下,产品将从数组中删除。
我面临的问题是,我不知道如何将 Pivot table 同步到此行为。
场景
假设用户加载了页面,并且此步骤包含的父产品是 [101,102]
。步骤的 ID 是 2。Pivot table 想要以下
假设用户决定删除产品 101
并添加产品 104
和 106
。然后数组看起来像这样 [101, 104, 106]
但枢轴 table 也需要同步此行为。我怎样才能做到这一点?
我试过类似的方法,但这样它只能分离它,而不是在必要时添加
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');
}
改变你的逻辑并不能解决你的问题。这将在给定步骤中分离和添加产品,我猜这是用户实际编辑的内容?
$step = Step::find($id);
$step->products()->sync(collect($request->data['parentProducts'])->pluck('id'));
Bonus points,你还可以使用模型绑定,为你的Step,让代码更干净。要求路由参数调用step.
public function update(Request $request, Step $step)
$step->products()->sync(collect($request->data['parentProducts'])->pluck('id'));
}