在 Laravel 中更新多个实体

问题描述 投票:0回答:2

composer.json 中的 Laravel 版本:“laravel/framework”:“^8.65”

我有一个 Laravel 后端,我试图从模型中获取满足条件的所有实体,然后迭代它们并根据特定逻辑更新其中一些实体,这是我遇到相同问题的代码的简化版本我正在使用实际的代码:

$entities = SomeModel::where('field1', 1)->get();
$entities->each(function ($entity, $index) {
    $entity->update(['field2' => $index]);
});

我在 SomeModel 中有 5 个满足 field1 == 1 的实体,因此运行此代码后,我希望其中一个将 field2 设置为 0,另一个设置为 1,...,最后一个设置为 4 .

但是,所有 5 个字段最终都将 field2 设置为 4

我尝试过使用

->fill(['field2' => $index])->save()
,我尝试过使用foreach循环,但我仍然得到相同的行为,更新返回的集合中的实体似乎会更新该集合中的所有实体

php laravel orm laravel-8
2个回答
0
投票

您可以像这样使用查询生成器:

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

请参阅此处:https://laravel.com/docs/10.x/queries#update-statements


0
投票

在 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();
   }
)
© www.soinside.com 2019 - 2024. All rights reserved.