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.第二層關聯

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM