THINKPHP_(3)_TP6中实现多层关联,第一个表关联第二个表查询出的数据,再关联第三个表

问题:

(1)canxunDanwei数据表对应的模型中有一个关联是:
    public function canxunDanwei()
    {
        return $this->belongsTo('\app\system\model\School', 'school_id', 'id');
    }

即关联school表。

(2)school表中又有一个关联,关联Category表,是

    // 单位级别数模型关联
    public function  dwJibie()
    {
        return $this->belongsTo('\app\system\model\Category', 'jibie_id', 'id');
    }

如何实现多层关联?

canxunDanwei-》school-》category

解决方法:

在canxundanwei数据表对应的模型中,编写查询方法:

        $src = [
            'school_id' => array()
            ,'xueqi_id' => array()
        ];
        $src = array_cover($srcfrom, $src);
        $src['school_id'] = strToArray($src['school_id']);
        $src['xueqi_id'] = strToArray($src['xueqi_id']);

        // 查询数据
        $data = $this
            ->when(count($src['school_id']) > 0, function($query) use($src){
                    $query->where('school_id', 'in', $src['school_id']);
                })
            ->when(count($src['xueqi_id']) > 0, function($query) use($src){
                    $query->where('xueqi_id', 'in', $src['xueqi_id']);
                })
            ->with(
                [
                    'canxunDanwei' => function($query){
                        $query
                            ->with(['dwJibie'])
                            ->field('id, title, jiancheng')
                        ;
                    },
                ]
            )
//            ->withCount(
//                [
//                    'dwTeacher' => function($query){
//                        $query->where('status', 1);
//                    }
//                ]
//            )
            ->order('id','asc')
            ->select();

上述代码中,通过两个with可以执行多层关联查询,但是field字段,会限制第二次关联dwJibie的输出。

目前尝试了各种方法,将关联dwJibie加入到field函数的参数中去,都无济于事。因此,选择去除如下代码:

->field('id, title, jiancheng')

即不限制输出字段。

即可。

调试结果:

(1)浏览器中调试JS的结果。

 

(2)PHP中调试结果

1.第一层关联canxunDanwei

 

2.第二层关联

 

posted @ 2021-06-03 17:29  秦皇汉武  阅读(4029)  评论(0编辑  收藏  举报