2016-04-28 69 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\Collectionhttps://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(); 
} 

而且如果pricemass assignable,它或许更可读为:

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

最后,如果你想要的操作是可能的SQL ,您可以将查询生成器上的whereIn()集合中的modelKeys()与单行(尽管未必推荐)组合起来:

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