我有一个基本结构如下的用户表:
id, uname, parent_id
1 john null
2 smith 1
3 mickey 1
4 lara 2
5 tom 3
6 jessica 4
7 baneet 4
用户模型中的关系定义如下:
public function children()
{
return $this->hasMany('App\Models\User', 'parent_id');
}
public function parents()
{
return $this->belongsTo('App\Models\User', 'parent_id');
}
所以,我要做的是:找到孩子没有孩子的所有用户。 在雷曼语中:找到所有有孩子的家庭,但他们的孩子没有孩子。
我知道如何在我必须查询像
之类的直接关系时这样做User::whereHas('children',function($query){
// $query;
})->get();
但不确定如何在嵌套关系中做。
有没有办法实现这个目标?
答案 0 :(得分:0)
试试这个:
User::whereHas('children', function($query) {
$query->whereDoesntHave('children');
})->get();
较短但有点违反直觉:
User::doesntHave('children.children')->get();