Обновление сводной таблицы и сохранение старых значений - PullRequest
0 голосов
/ 22 мая 2019

Я работаю в 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 () и сохранение старых значений, если они существуют?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...