Laravel Eloquent基于Jenssegers Mongo扩展通过ID存储一对多关联疑问
不需要先遍历ID查询对应的汽车模型实例,有更高效的方案可以直接用ID列表完成关联,根据你的存储逻辑选对应方案即可:
方案1:使用关联方法操作(符合Eloquent开发规范)
你在用的Mongo扩展对HasMany关系做了适配,支持直接传入ID数组操作关联,不需要提前查模型:
- 追加关联(保留当前所有者已有的汽车关联,仅新增本次传入的ID):
调用attach方法,自动去重避免重复关联同一个ID:// $owner为已查询到的所有者实例,$carIds为传入的汽车ID数组 $owner->cars()->attach($carIds); - 覆盖关联(清空所有者当前的所有汽车关联,仅保留本次传入的ID):
调用sync方法:$owner->cars()->sync($carIds);
方案2:直接操作字段批量更新(性能最优)
如果你的关联外键存储在Car侧(Car表存在owner_id字段),可以直接执行批量更新,全程不需要实例化任何模型:
Car::whereIn('id', $carIds)->update(['owner_id' => $owner->getKey()]);
如果关联仅存储在Owner侧的car_ids字段,也可以直接操作该字段后保存:
// 追加模式:合并原有ID和新ID后去重 $owner->car_ids = array_unique(array_merge($owner->car_ids ?? [], $carIds)); // 覆盖模式直接赋值即可 // $owner->car_ids = $carIds; $owner->save();
内容的提问来源于stack exchange,提问作者user1768741
相关产品推荐
相关产品推荐

