更新中间表Laravel关系

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了更新中间表Laravel关系相关的知识,希望对你有一定的参考价值。

我有一张桌子,里面有'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方法。根据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);

以上是关于更新中间表Laravel关系的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 多对多关系检查与中间表

与多个中间表的多对多 Laravel Eloquent 关系

如何从 laravel 中的中间表(多对多关系)中获取数据

laravel怎么在中间表插入数据

Laravel 连接具有中间关系的表

两个模型之间的关系与中间表