我想在集合的所有模型中设置某个属性。
在简单的 SQL 中:
UPDATE table SET att = 'foo' WHERE id in (1,2,3)
我的代码:
$models = MyModel::findMany([1,2,3]);
$models->update(['att'=>'foo']);
取自here https://stackoverflow.com/questions/25597266/how-to-update-a-collection-using-eloquent-laravel
但不起作用。我越来越
Call to undefined method Illuminate\Database\Eloquent\Collection::update()
我发现它的唯一方法是使用查询生成器构建查询,但我宁愿避免这种情况。
您正在返回一个集合,而不是保持查询打开以进行更新。就像你的例子正在做的那样。
$models = MyModel::whereIn('id',[1,2,3]);
$models->update(['att'=>'foo']);
whereIn
将查询您案例中的列id
,第二个参数是要返回的ids数组,但不会执行查询。这findMany
您正在使用的是执行它,从而返回模型集合。
如果您需要将模型用于其他用途,您可以这样做$collection = $models->get();
它将返回模型的集合。
如果你不只是像这样简单地写在一行上;
MyModel::whereIn('id',[1,2,3])->update(['att'=>'foo']);
我不推荐的另一个选择是使用以下内容;
$models = MyModel::findMany([1,2,3]);
$models->each(function ($item){
$item->update(['att'=>'foo']);
});
这将循环遍历集合中的所有项目并单独更新它们。但我推荐的是whereIn
method.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)