2016-04-18 5 views
3

Чтобы обновить одну запись в сводной таблице, я использую метод updateExistingPivot. Однако в качестве первого аргумента требуется $ id. Например:UpdateExistingPivot для нескольких идентификаторов

$step->contacts()->updateExistingPivot($id, [ 
    'completed' => true, 
    'run_at' => \Carbon\Carbon::now()->toDateTimeString() 
]); 

Но как я могу обновить сразу несколько существующих строк в сводной таблице?

+0

Не уверен, но попробуйте поставить там массив с идентификаторами – apelsinka223

+0

я попробовал и Бесполезный 't work :( – Victor

+0

Возможно, это ошибка, похоже, это работа http://stackoverflow.com/a/30756967/4581725 – apelsinka223

ответ

1

Существует метод getRelatedIds() в отношении BelongsToMany, к которому вы можете получить доступ, который возвращает коллекцию идентификаторов связанной модели, которые отображаются в сводной таблице по сравнению с исходной моделью.

Тогда Еогеасп сделает работу:

$ids = $step->contacts()->getRelatedIds(); 

foreach ($ids as $id){ 
    $step->contacts()->updateExistingPivot($id, ['completed' => true]); 
} 
0

можно обновить только с помощью оператора цикла, как там функция updateExistingPivot принимать только одномерный Params, см основной функции для Laravel 5.3.

File: yoursite\vendor\laravel\framework\src\Illuminate\Database\Eloquent\Relations\BelongsToMany.php 

Функция: updateExistingPivot

public function updateExistingPivot($id, array $attributes, $touch = true) 
    { 
     if (in_array($this->updatedAt(), $this->pivotColumns)) { 
      $attributes = $this->setTimestampsOnAttach($attributes, true); 
     } 

     $updated = $this->newPivotStatementForId($id)->update($attributes); 

     if ($touch) { 
      $this->touchIfTouching(); 
     } 

     return $updated; 
    } 

Таким образом, вы должны следовать простой процесс:

$step = Step::find($stepId); 
foreach(yourDataList as $youData){ 
    $step->contacts()->updateExistingPivot($youData->contract_id, [ 
    'completed' => true, 
    'run_at' => \Carbon\Carbon::now()->toDateTimeString() 
]); 

} 
Смежные вопросы