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循环,但我仍然得到相同的行为,更新返回的集合中的实体似乎会更新该集合中的所有实体
您可以像这样使用查询生成器:
DB::table('some_table')->where('field1', 1)->update([
'some_field' => 'New value'
]);
请参阅此处:https://laravel.com/docs/10.x/queries#update-statements
在 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();
}
)