Я работаю в 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 . Это нормально для значения all_rights в $calendar->users()->sync($request->input('users'));
, потому что мне нужно, чтобы оно было на нуле, но для дисплея это проблематично, поскольку пользователя может раздражать тот факт, что его коллега изменил одну настройку в календарь, он должен обновить его, чтобы увидеть его снова.
Итак, мой вопрос: возможно ли массовое обновление с помощью sync () и сохранение старых значений, если они существуют?