Вы можете проверить документацию для Illuminate\Database\Eloquent\Collection
: https://laravel.com/api/4.2/Illuminate/Database/Eloquent/Collection.html
Там нет никакого способа, чтобы обновить все результаты в коллекции, но есть методы перебора каждый , в котором вы можете делать все, что вам нужно. Может, что-то вроде ...?
$collection->each(function($model) {
$model->price *= 5;
$model->save();
});
Ваш второй пример кода выглядит почти правильно, за исключением того, что нет prices
свойства доступно на коллекции. Вы просто перебираете коллекцию. Это эквивалентно приведенному выше коду:
foreach ($collection as $model) {
$model->price *= 5;
$model->save();
}
И если price
поле mass assignable, это, возможно, более читаемым, как:
$collection->each(function($model) {
$model->update(['price' => $model->price * 5]);
});
Наконец, если операцию вы хотите возможно в SQL , вы могли бы объединить modelKeys()
из коллекции с whereIn()
на запрос строителя для однострочного (хотя и не обязательно рекомендуемого):
$model->whereIn($model->getKey(), $collection->modelKeys())
->update(['price' => \DB::raw('price * 5')]);