2016-04-28 32 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')]);