laravel 4.2更新多个模型

laravel 4.2更新多个模型,laravel,laravel-4,eloquent,Laravel,Laravel 4,Eloquent,是否可以像这样更新多个模型: $value = $model->collection; if(count($value)) { $prices = $collection->prices()->update(['price' => 'price' * 5]); } if(count($value)) { $prices = $collection->prices; foreach($prices as $price) {

是否可以像这样更新多个模型:

$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();
   }
} 
??或者我需要这样做:

$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();
   }
} 

您可以查看
illumb\Database\elounce\Collection
的文档:

没有更新集合中所有结果的方法,但有迭代每个项目的方法,您可以在其中执行任何需要的操作。也许是

$collection->each(function($model) {
    $model->price *= 5;
    $model->save();
});
您的第二个代码示例看起来几乎正确,只是集合中没有可用的
prices
属性。您只需迭代集合本身。这相当于上述代码:

foreach ($collection as $model) {
    $model->price *= 5;
    $model->save();
}
如果
price
字段是,那么它的可读性可能更高:

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

最后,如果您想要的操作在SQL中是可能的,那么您可以将集合中的
modelKeys()
与查询生成器上的
where()
组合为一行程序(尽管不一定推荐):