我有一个包含'Officiant_id'
和'awards_id'
当用户编辑他们的个人资料时,它会在一个复选框中显示所有可用的个人资料,并自动检查该表格中的那个。
虽然现在是时候更新了,但是让我们说用户取消选择一个,如何更新表来删除它,或者如果他们检查一个新表添加那个新表。
@if(!empty($officiant - > useraward))
@foreach($officiant - > useraward as $arr)
@php $removeId[] = $arr - > id @endphp {
{
Form::checkbox('awards[]', $arr - > id, true, ['class' => ''])
}
} {
{
$arr - > name
}
} {
!!'<br>'!!
}
@endforeach
@endif
@php
$offaward = Info::officiantAwards();
foreach($removeId as $key) {
unset($offaward[$key]);
}
@endphp
@foreach($offaward as $k => $v) {
{
Form::checkbox('awards[]', $k, false)
}
} {
{
$v
}
} {
!!'<br>'!!
}
@endforeach
if (!empty($request - > awards)) {
foreach($request - > awards as $i => $k) {
$awards[] = $request - > $k;
}
}
答案 0 :(得分:0)
将所有奖项作为数组获取,并在sync()
上调用$officiant
方法。根据documentation /同步协会
您也可以使用sync方法构建多对多 关联。 sync方法接受要放置的ID数组 中间表。任何不在给定数组中的ID都将是 从中间表中删除。所以,经过这次手术后 完成后,只有给定数组中的ID才会存在 中间表:
因此,在您调用update()
或save()
后,
//get all award ids
$awards = $request->get('awards');
//save or update officient action
//updating relation
$officiant->awards()->sync($awards);