更新具有多行的模型

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']);