我正在Laravel 5.8中为一个项目工作,我需要在数据透视表上进行更新,并保留不更新的值。
这是我的课堂日历:
class Calendar extends Model {
public function users() {
return $this->belongsToMany('App\Models\User')->withPivot('display', 'all_rights', 'color', 'rgbCode');
}
}
这是我的班级用户
class User extends Model {
public function calendars() {
return $this->belongsToMany('App\Models\Calendar')->withPivot('display', 'all_rights', 'color', 'rgbCode');
}
}
所有用户都可以拥有各种活动的日历。创建日历时,我将用户分配到不同的列表中,以使其成为管理员或简单用户:
public function create(Request $request)
{
$calendar = new Calendar();
$calendar->name = $request->input('name');
$calendar->save();
$calendar->users()->attach($request->input('users'), ['color' => $color->name, 'rgbCode' => $color->rgbCode]);
$calendar->users()->attach($request->input('administrators'), ['all_rights' => 1,'color' => $color->name, 'rgbCode' => $color->rgbCode]);
}
在创建时,所有日历都设置为 display:null 。用户稍后可以切换显示。
问题是,当我想更新日历(名称或允许的人)时,同步实际上并没有达到我想要的效果:
public function update(Request $request)
{
$calendar = Calendar::find($request->input('id'));
$calendar->name = $request->input('name');
$calendar->update();
$calendar->users()->sync($request->input('users'));
$calendar->users()->sync($request->input('administrators'), ['all_rights' => 1]);
}
如果我不同步数组中的精确值,它将作为默认值,所以 null 。对于$calendar->users()->sync($request->input('users'));
中的 all_rights 值也可以,因为我需要将其设置为null,但是对于显示来说,这是有问题的,因为用户可能会因为同事更改了一个值而感到恼火日历中的设置,他必须对其进行更新才能再次查看。
所以我的问题是:是否可以使用sync()进行大量更新,并保留旧值(如果存在)?