Laravel, sync () – как синхронизировать массив, а также передавать дополнительные поля поворота?

Официальная документация Laravel имеет это в функции sync() :

 $user->roles()->sync( array( 1, 2, 3 ) ); 

Вы также можете связать другие значения сводной таблицы с указанными идентификаторами:

 $user->roles()->sync( array( 1 => array( 'expires' => true ) ) ); 

В последнем примере добавляется только одна сводная строка. Я не понимаю, как я могу связать другие записи сводной таблицы, если есть несколько строк для синхронизации?

Заранее спасибо.

    Чтобы sync несколько моделей вместе с настраиваемыми сводными данными, вам необходимо:

     $user->roles()->sync( array( 1 => array( 'expires' => true ), 2 => array( 'expires' => false ), ... )); 

    То есть.

     sync( array( related_id => array( 'pivot_field' => value ), ... )); 

    редактировать

    Отвечая на комментарий:

     $speakers = (array) Input::get('speakers'); // related ids $pivotData = array_fill(0, count($speakers), ['is_speaker' => true]); $syncData = array_combine($speakers, $pivotData); $user->roles()->sync($syncData); 

    Это работает для меня

     foreach($photos_array as $photo_name){ //collect all inserted record IDs $photo_id_array[$photo->id] = ['type' => 'Offence']; } //Insert into offence_photo table $offence->photos()->sync($photo_id_array, false);//dont delete old entries = false 

    Прикрепление / отсоединение

    Eloquent также предоставляет несколько дополнительных вспомогательных методов, чтобы сделать работу с родственными моделями более удобной. Например, давайте представим, что у пользователя может быть много ролей, а у роли может быть много пользователей. Чтобы прикрепить роль к пользователю, вставив запись в промежуточную таблицу, которая присоединяется к моделям, используйте метод attach:

     $user = App\User::find(1); $user->roles()->attach($roleId); 

    При присоединении отношения к модели вы также можете передать массив дополнительных данных, которые необходимо вставить в промежуточную таблицу:

     $user->roles()->attach($roleId, ['expires' => $expires]); 

    Вы также можете использовать Sync, если хотите удалить старые роли и сохранить только новые, которые вы сейчас прикрепляете

     $user->roles()->sync([1 => ['expires' => $expires], 2 => ['expires' => $expires]); 

    Поведение по умолчанию может быть изменено путем передачи «false» в качестве второго аргумента. Это добавит роли с идентификаторами 1,2,3, не затрагивая существующие роли.

    В этом режиме синхронизация ведет себя аналогично методу attach.

     $user->roles()->sync([1 => ['expires' => $expires], 2 => ['expires' => $expires], false); 

    Ссылка: https://laravel.com/docs/5.4/eloquent-relationships