2016-04-18 18 views
3

Um einen einzelnen Datensatz in Pivot-Tabelle zu aktualisieren, verwende ich updateExistingPivot Methode. Allerdings benötigt $ id als erstes Argument. Zum Beispiel:UpdateExistingPivot für mehrere IDs

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

Aber wie kann ich auf einmal mehr vorhandenen Zeilen in Pivot-Tabelle aktualisieren?

+0

Nicht sicher, aber versuchen Sie es eine Reihe stellen mit ids – apelsinka223

+0

Ich habe versucht, und es didn 't Arbeit :( – Victor

+0

Vielleicht ist es ein Fehler, es scheint, Arbeit zu sein http://stackoverflow.com/a/30756967/4581725 – apelsinka223

Antwort

1

In der BelongsToMany-Beziehung, auf die Sie zugreifen können, gibt es eine getRelatedIds() -Methode, die eine Auflistung der IDs des zugehörigen Modells zurückgibt, die in der Pivot-Tabelle für das ursprüngliche Modell angezeigt werden.

Dann wird ein foreach die Arbeit machen:

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

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

Sie nur nur mit einem Schleifen-Anweisung, da es updateExistingPivot Funktion aktualisieren können eindimensional params akzeptieren, finden Sie in der Kernfunktion für Laravel 5.3.

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

Funktion: 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; 
    } 

Also, sollten Sie den einfachen Prozess folgen:

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

} 
Verwandte Themen