更新具有多行的模型
Update model which having multiple rows
我有一个包含多行的对象模型,例如通过此查询获得的结果:
$cities = City::whereIn('id' , [1,2,3])->get();
我想做的是在不使用 each
的情况下用相同的值更新每一行,因为 each
正在对每一行进行查询,所以在上面的查询中我将有 3 个查询。
而不是这样做:
$cities->each->update(['name' => 'test']);
我想做这样的事情,因为我已经有了模型对象,但它不起作用:
$cities->update(['name' => 'test']);
相反,我必须做这样的事情才能让它发挥作用:
City::whereIn('id' , $cities->pluck('id'))->update(['Avatar' => 'test']);
我的问题是;为什么我不能使用这个:
$cities->update(['name' => 'test']);
当您使用 ->get()
方法时,您得到的不是模型,而是模型集合。
没有多行模型这样的东西。模型只有一个 "row".
在documentation中有一个例子:
App\Flight::where('active', 1)
->where('destination', 'San Diego')
->update(['delayed' => 1]);
请参阅批量更新部分。
因此,在您的情况下,查询必须是:
City::whereIn('id' , [1,2,3])
->update(['name' => 'test']);
我有一个包含多行的对象模型,例如通过此查询获得的结果:
$cities = City::whereIn('id' , [1,2,3])->get();
我想做的是在不使用 each
的情况下用相同的值更新每一行,因为 each
正在对每一行进行查询,所以在上面的查询中我将有 3 个查询。
而不是这样做:
$cities->each->update(['name' => 'test']);
我想做这样的事情,因为我已经有了模型对象,但它不起作用:
$cities->update(['name' => 'test']);
相反,我必须做这样的事情才能让它发挥作用:
City::whereIn('id' , $cities->pluck('id'))->update(['Avatar' => 'test']);
我的问题是;为什么我不能使用这个:
$cities->update(['name' => 'test']);
当您使用 ->get()
方法时,您得到的不是模型,而是模型集合。
没有多行模型这样的东西。模型只有一个 "row".
在documentation中有一个例子:
App\Flight::where('active', 1)
->where('destination', 'San Diego')
->update(['delayed' => 1]);
请参阅批量更新部分。
因此,在您的情况下,查询必须是:
City::whereIn('id' , [1,2,3])
->update(['name' => 'test']);