我有3张桌子,并且我处于多对多关系。
表“ semaine”
id | name |
表格“生物主题”
id | namebitheme
表“ bitheme_semaine”。在其中添加新的“状态”列
bitheme_id | semaine_id | statut
就我而言,如果存在这种关系,我的状态可以为1或2(在数据库中,该字段的默认值为1)。
在我的编辑表单中,我必须选中复选框:
<input type="checkbox" name="bithemes[]" value="{{ $id }}"> </input>
<input type="checkbox" name="statut[]" value="{{ $id }}"> </input>
我也同步了我的表:
$semaine->update($request->all());
$semaine->bithemes()->sync($request->input('bithemes', []));
但是,如果选中它,我也想同步状态。 所以我添加了Semaine模型的关系:
public function bithemes()
{
return $this->belongsToMany(Bitheme::class)->withPivot('statut');
}
,我尝试测试与:
的同步$semaine->bithemes()->sync($request->input('bithemes', []), ['statut' => 2]);
但是状态永远不会同步。
答案 0 :(得分:0)
在您的示例中,sync方法将ID的array
作为第一个参数。但是,当您要同步数据透视表的属性时,请为其提供array
,其ID为该数组的numeric index
,并为数据透视表属性的每个索引的值分别为array
。
$syncable = [];
foreach($request->input('bithemes', []) as $bithemeId) {
$syncable[$bithemeId] = ['status' => 2];
}
$semaine->bithemes()->sync($syncable);
为了精确起见,您使用的格式是仅同步一个ID
if (isset($request->input('bithemes')[0])) {
$semaine->bithemes()->sync($request->input('bithemes')[0], ['statut' => 2]);
}
答案 1 :(得分:0)
完美。 我用:
更改了表单 <input type="checkbox" name="bithemes[]" value="{{ $id }}" {{ (in_array($id, old('bithemes', [])) || isset($semaine) && $semaine->bithemes->contains($id)) ? 'checked' : '' }}> </input>
<input type="checkbox" name="statut[]" value="{{ $id }}"> </input>
和我的控制器:
$syncable = [];
foreach($request->input('bithemes', []) as $key => $value) {
if (!isset ($request->input('statut')[$key])) {$statut = 1;} else {$statut = 2;}
$syncable[$value] = ['statut' => $statut];
}
$semaine->bithemes()->sync($syncable);
现在一切都很好。谢谢