仅显示可见项目和组,其中组中有项目

时间:2018-07-05 08:34:08

标签: laravel

我有这两个查询,但每个查询中我得到正确结果的一半。

我有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();

2 个答案:

答案 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();