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.第二层关联
你永远不知道未来会有什么,做好当下。技术改变世界,欢迎交流。