我有这两个查询,但每个查询中我得到正确结果的一半。
我有group
个表和item
个表。
您可以将item
条记录设置为不可见。
您可以将group
条记录设置为不可见。
在某些情况下,group
记录没有任何相关的item
记录(空组)。
我想选择所有group
条可见且具有相关item
条记录的记录。
这将返回空的组记录(没有相关项目的组)
return $this->model->with( [ 'items' => function($query){
$query->where('invisible','=',FALSE)->orderBy('description', 'ASC');
}])
->where("hos_id",$hos_id)
->where('invisible','=',FALSE)
->orderBy('description', 'asc')
->get();
此项目仅返回带有项目记录的组,但也返回hidden
个项目
return $this->model->with('items')
->whereHas('items',function ($query){
$query->where('invisible','=',FALSE)->orderBy('description', 'ASC');
})
->where("hos_id",$hos_id)
->where('invisible','=',FALSE)
->orderBy('description', 'asc')
->get();
答案 0 :(得分:2)
使用
return $this->model->with(['items' => function ($query){
$query->where('invisible','=',FALSE)->orderBy('description', 'ASC');
}])
->whereHas('items',function ($query){
$query->where('invisible','=',FALSE)->orderBy('description', 'ASC');
})
->where("hos_id",$hos_id)
->where('invisible','=',FALSE)
->orderBy('description', 'asc')
->get();
答案 1 :(得分:0)
不确定我是否100%理解,因此我已将以下内容写得尽可能简单,如果无法使用,您可以将其分开。
左连接应允许没有项目的组(空组)
Group::leftJoin('items', function ($join) {
$join->on('groups.id', '=', 'items.group_id')
->where('invisible', false);
})
->where('invisible', false)
->get();