が、それはこのように複数のモデルを更新することはできますか?laravel 4.2アップデート、複数のモデル
if(count($value))
{
$prices = $collection->prices;
foreach($prices as $price) {
$price->price = $price->price * 5;
$price->save();
}
}
が、それはこのように複数のモデルを更新することはできますか?laravel 4.2アップデート、複数のモデル
if(count($value))
{
$prices = $collection->prices;
foreach($prices as $price) {
$price->price = $price->price * 5;
$price->save();
}
}
あなたは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')]);