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')]);