我想在一个集合的所有模型中设置某个属性。
在普通 SQL 中:
UPDATE table SET att = 'foo' WHERE id in (1,2,3)
我的代码:
$models = MyModel::findMany([1,2,3]);
$models->update(['att'=>'foo']);
取自 这里
但不起作用。我越来越
Call to undefined method Illuminate\Database\Eloquent\Collection::update()
我发现它的唯一方法是使用查询生成器构建查询,但我宁愿避免这种情况。
原文由 Jarry 发布,翻译遵循 CC BY-SA 4.0 许可协议
您正在返回一个集合,而不是保持查询打开以进行更新。就像你的例子一样。
whereIn
将在你的案例中查询一列id
,第二个参数是你要返回的 id 的数组,但不会执行查询。您正在使用的findMany
正在执行它,从而返回模型集合。如果您需要让模型用于其他用途,您可以执行
$collection = $models->get();
它将返回模型的集合。如果您不只是像这样简单地将其写在一行上;
我不推荐的另一个选项是使用以下选项;
这将遍历集合中的所有项目并单独更新它们。但我推荐
whereIn
方法。