Laravel查询指定ID用户关联数据时返回全部用户如何解决
问题原因
- 代码执行逻辑顺序错误:
find()方法会立即触发SQL查询返回指定ID的用户模型实例,后续调用with()方法会重新创建查询构造器,之前的ID过滤条件完全失效,最终查询会返回不带用户条件的关联数据,不符合预期。 - 额外注意点:
Store模型中关联方法写的inventory::class如果类名实际为首字母大写的Inventory,在大小写敏感的系统环境中会抛出类不存在错误,建议统一修正为大驼峰写法。
正确实现代码
有两种等价实现方案:
方案1:预加载(执行效率更高,推荐)
先声明要预加载的关联关系,再执行ID查找:
$this->storeproducts = User::with(['stores.inventories.product'])->find($x);
方案2:懒加载(适用于已经获取到用户实例的场景)
先拿到用户实例后,主动加载关联数据:
$user = User::find($x); $user->load(['stores.inventories.product']); $this->storeproducts = $user;
执行以上任意一种代码后,$this->storeproducts即为指定ID的用户实例,可直接通过$this->storeproducts->stores访问关联的店铺数据,嵌套的库存、商品关联也会同步加载完成。
内容的提问来源于stack exchange,提问作者Puneet Sharma
相关产品推荐
相关产品推荐

