关联查询怎么做到关联ModelB不存在条件数据则ModelA同时不反回这条数据?
$playServices = PlayService::with('play_user:id,sex')
->whereHas('play_user', function (Builder $query) use ($request, $sex) {
$query->when($request->has('sex'), function ($query) use ($sex) {
$query->where('sex', intval($sex));
});
})
->simplePaginate(30);
PlayService 属于 PlayUser
现在是以PlayService为主查询,play_user中数据不存在时最终的结果返回为
"data": [
{
"field" : "xxxx",
"play_user": null
}
],
怎么做到当play_user不存在数据时这一整条数据都被过滤掉?类似与DB的关联查询。
已解决,whereHas经过测试并没有实现。
解决方案使用rightJoin以play_user为主表查询
PlayService::rightJoin('play_users', 'play_services.play_user_id', '=', 'play_users.id')
->when($request->has('sex'), function ($query) use ($sex) {
$query->where('play_users.sex', intval($sex));
})
把
whereHas
放with
前面试试? :joy:可以看看
whereNotNull
没试过没发言权哦,这个不会报错的,
whereHas
和with
是两个功能,互不影响。代码提供的太少,无法判断,看你代码使用
whereHas
是没有问题的,能达到你的要求。同意楼上,whereHas 就行了
你的play_user返回了null,你可以检查一哈你的play_user和play_service的关联字段,这个是必须要放到with的查询中才能返回数据,whereHas最后是走的原生SQL的exists,在你的模型关联没错的基础上,肯定是限制返回数据了的
看你这个应该是没有把play_service表关联play_user的字段查出来
@MyPuppet 我不信,真的,不信。你代码贴的太少了,也不知道你是怎么打印出来的那个
json
。如果说符合条件,列表就没有这条数据,从何而来的这个
json
。