在Laravel中更新多个实体

axr492tv  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(119)

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的组合)

uqdfh47h

uqdfh47h1#

在Laravel中,凭借其惊人的ORM口才,您可以轻松地从满足条件的模型中获取所有实体,然后通过它们进行筛选并更新其中一些实体:
(在本例中,我希望选择所有相关实体并删除它们)

Model::where('field', value)->get()->map(
   function ($entity) {
     $entity->fill(['is_deleted' => true, 'deleted_at' => date('Y-m-d H:i:s')])->save();
   }
)

字符串

xxslljrj

xxslljrj2#

你可以这样使用Query Builder:

DB::table('some_table')->where('field1', 1)->update([
    'some_field' => 'New value'
]);

字符串
参见此处:https://laravel.com/docs/10.x/queries#update-statements

相关问题