2016-04-28 2 views
1

Можно ли обновить несколько моделей, как это:Laravel 4,2 обновление несколько моделей

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

? или мне нужно сделать что-то вроде этого:

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

ответ

1

Вы можете проверить документацию для 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')]); 
Смежные вопросы