Laravel 5: синхронизация дополнительного поля с помощью поворота

Модель пользователя:

public function positions() { return $this->belongsToMany('App\Position')->withPivot('company_id')->withTimestamps(); } 

Позиционная модель:

 public function users() { return $this->belongsToMany('App\User')->withPivot('company_id')->withTimestamps(); } 

По представлению формы у меня есть два массива:

 $allPositionIds array:3 [ 0 => 98 1 => 99 2 => 100 ] $allCompanyIds array:3 [ 0 => 129 1 => 130 2 => 131 ] 

С помощью

 $user->positions()->sync($allPositionIds); 

который синхронизирует таблицу position_user, как и ожидалось, с пользователем и соответствующими идентификаторами позиции.

Однако я не могу понять, как заполнить дополнительное поле («company_id»)

Это то, что я ожидаю от работы:

 $user->positions()->sync([$allPositionIds => ['company_id' => $allCompanyIds]], false); 

Я прочитал руководство, но я просто не вижу, как обращаться с этими массивами, поскольку примеры из руководства, похоже, относятся к ситуации, когда дополнительное поле, которое нужно заполнить, не является массивом из нескольких элементов:

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

Я попытался использовать этот ответ

для объединения двух массивов:

 $syncData = array_combine($allPositionIds,$allCompanyIds); 

и получить $ syncData из:

 array:3 [ 98 => 129 99 => 130 100 => 131 ] 

Какая карта соответствует массиву id позиции и массиву идентификаторов компании, но если я попытаюсь

 user->positions()->sync($syncData); 

Я получаю "SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails" - I believe it is trying to add in the company_id as another position_user.position_id but then it errors out as that doesn't exist in the positions table.

Что бы я ни пытался в данный момент, мое поле company_id все еще не обновляется / заполняется.

Что я делаю неправильно и как обновить это поле?

    Вы на самом деле довольно близки. Требуемый формат:

     [ 98 => ['company_id' => 129], 99 => ['company_id' => 130], 100 => ['company_id' => 131] ] 

    Это должно генерировать правильный массив:

     $extra = array_map(function($companyId){ return ['company_id' => $companyId]; }, $allCompanyIds); $data = array_combine($allPositionIds, $extra); $user->positions()->sync($data);