2016-04-28 23 views
1

Ist es möglich, mehrere Modelle wie folgt zu aktualisieren:Laravel 4.2 Update mehrere Modelle

$value = $model->collection; 
if(count($value)) 
{  
    $prices = $collection->prices()->update(['price' => 'price' * 5]); 
} 

? oder ich brauche so etwas wie dies zu tun:

if(count($value)) 
{  
    $prices = $collection->prices; 
    foreach($prices as $price) { 
    $price->price = $price->price * 5; 
    $price->save(); 
    } 
} 

Antwort

1

Sie können die Dokumentation für Illuminate\Database\Eloquent\Collection überprüfen: https://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html

Es gibt keine Methode, um alle Ergebnisse in einer Sammlung zu aktualisieren, aber es gibt Methoden über jeden iterieren Gegenstand, in dem Sie tun können, was Sie brauchen. Vielleicht etwas wie ...?

$collection->each(function($model) { 
    $model->price *= 5; 
    $model->save(); 
}); 

Ihr zweites Codebeispiel sieht außer fast richtig, dass es kein prices Eigentum an der Sammlung zur Verfügung. Sie iterieren einfach über die Sammlung selbst. Dies entspricht den Code oben:

foreach ($collection as $model) { 
    $model->price *= 5; 
    $model->save(); 
} 

Und wenn das price Feld mass assignable ist, ist es vielleicht besser lesbar als:

$collection->each(function($model) { 
    $model->update(['price' => $model->price * 5]); 
}); 

Schließlich, wenn der Betrieb Sie wollen, ist möglich in SQL Sie könnten modelKeys() aus einer Sammlung mit whereIn() auf dem Query Builder für einen Einzeiler kombinieren (obwohl nicht unbedingt empfohlen):

$model->whereIn($model->getKey(), $collection->modelKeys()) 
     ->update(['price' => \DB::raw('price * 5')]);