Laravel hasCount查询仍返回无pingtree_entries关联模型的问题排查
解决Laravel中关联模型过滤问题
你当前的has方法仅确保Application模型存在至少一个符合条件的关联,但使用with加载关联时未对pingtree_group_entries做过滤,因此无关联pingtree_entries的条目仍会被包含。
要完全排除这类无效条目,需在关联加载时添加约束,修改后的代码如下:
/** * Display the specified resource. * * @return \Illuminate\Http\Response */ public function show(Company $company, Application $application) { $app = Application::has('pingtree_group.pingtree_group_entries.pingtree.pingtree_entries') ->with([ 'modelable', 'pingtree_group' => function ($query) { $query->with([ 'pingtree_group_entries' => function ($q) { // 仅保留关联pingtree存在pingtree_entries的条目 $q->whereHas('pingtree.pingtree_entries'); // 加载对应关联数据 $q->with(['pingtree.pingtree_entries']); } ]); } ]) ->where('id', 30) ->first(); return new ApiSuccessResponse($app); }
代码说明:
- 外层
has方法保留,确保当前Application确实存在至少一个有效关联,避免返回完全无符合条件关联的模型。 - 在加载
pingtree_group时,通过闭包对pingtree_group_entries添加whereHas约束,直接过滤掉关联pingtree无pingtree_entries的条目。 - 嵌套加载
pingtree.pingtree_entries,保证返回的关联数据均为符合要求的有效数据。
内容的提问来源于stack exchange,提问作者Ryan H
相关产品推荐
相关产品推荐

