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()
组合为一行程序(尽管不一定推荐):