gpt4 book ai didi

php - Eloquent - 更新集合中的所有模型

转载 作者:可可西里 更新时间:2023-10-31 23:02:18 25 4
gpt4 key购买 nike

我想在一个集合的所有模型中设置某个属性。

在普通 SQL 中:

UPDATE table SET att = 'foo' WHERE id in (1,2,3)

我的代码:

$models = MyModel::findMany([1,2,3]);
$models->update(['att'=>'foo']);

取自here

但不起作用。我得到了

Call to undefined method Illuminate\Database\Eloquent\Collection::update()

我发现它的唯一方法是使用查询构建器构建查询,但我宁愿避免这种情况。

最佳答案

您正在返回一个集合,而不是保持查询打开以进行更新。就像你的例子一样。

$models = MyModel::whereIn('id',[1,2,3]);
$models->update(['att'=>'foo']);

whereIn会查询你case中的一列id,第二个参数是你要返回的id的数组,但不会执行查询。您正在使用的 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 方法。

关于php - Eloquent - 更新集合中的所有模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28349929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com