我有一个包含'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;
    }
}

最佳答案

将所有奖励作为数组获取,并在sync()上调用$officiant方法。


  您也可以使用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);

关于php - 更新中间表Laravel关系,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47893304/

10-10 21:55