2016-04-28 15 views

答えて

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

あなたの2番目のコード例では、利用可能なpricesプロパティは、コレクションにはありませんことを除いて、ほとんど正しい見えます。コレクション自体を反復するだけです。

foreach ($collection as $model) { 
    $model->price *= 5; 
    $model->save(); 
} 

そしてpriceフィールドがmass assignableであれば、それはおそらくより読みやすいようだ:これは上記のコードと同等ですしたい操作をSQLで可能であるならば、

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

最後に(必ずしも推奨されているわけではありませんが)modelKeys()をコレクションのwhereIn()と照会ビルダーで組み合わせることができます(必ずしも推奨されるわけではありません)。

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