composer.json中的Laravel版本:“laravel/framework”:“^8.65”
我有一个Laravel后端,我试图从满足条件的模型中获取所有实体,然后根据一定的逻辑遍历它们并更新其中的一些,这里是我的代码的简化版本,它遇到了我在实际代码中遇到的相同问题:
$entities = SomeModel::where('field1', 1)->get();
$entities->each(function ($entity, $index) {
$entity->update(['field2' => $index]);
});
字符串
我有5个实体满足SomeModel中的field 1 == 1,所以在运行这段代码后,我希望其中一个将field 2设置为0,另一个设置为1,...,最后一个设置为4。
但是,这5个字段最终都将field 2设置为4
我试过使用->fill(['field2' => $index])->save()
,我试过使用foreach循环,但我仍然得到相同的行为,即更新返回集合中的实体似乎会更新该集合中的所有实体
编辑:在尝试了许多方法之后,我认为这可能与这个模型的PK不是唯一的这一事实有关,实际上我的代码片段中的'field 1'是我在模型中设置为PK的。考虑到我的模型中没有唯一的键,我如何才能实现这一点(唯一性有点复杂,要么field 1和fieldX的组合是唯一的,要么field 1和fieldY的组合是唯一的,或field 1和fieldZ的组合)
2条答案
按热度按时间uqdfh47h1#
在Laravel中,凭借其惊人的ORM口才,您可以轻松地从满足条件的模型中获取所有实体,然后通过它们进行筛选并更新其中一些实体:
(在本例中,我希望选择所有相关实体并删除它们)
字符串
xxslljrj2#
你可以这样使用Query Builder:
字符串
参见此处:https://laravel.com/docs/10.x/queries#update-statements