Php Laravel查询同一表上的嵌套关系

Php Laravel查询同一表上的嵌套关系,php,laravel-5,Php,Laravel 5,我有一个用户表,其基本结构如下所示: 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', '

我有一个用户表,其基本结构如下所示:

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();
但不确定如何在嵌套关系中执行

有什么办法可以做到这一点吗?

试试这个:

User::whereHas('children', function($query) {
    $query->whereDoesntHave('children');
})->get();
简短但有点违反直觉:

User::doesntHave('children.children')->get();

谢谢你的回答,但出于某种奇怪的原因,Doesnthave不起作用。当我的查询是User::whereHas'children'->get时,它仍然返回相同的结果;此外,即使在查询日志中,也不会执行whereDoesntHave[▼ query=>select from users where exists select from users as laravel_reserved_0 where users.id=laravel_reserved_0.parent_id and laravel_reserved_0▶ 绑定=>[]时间=>1.8]1=>数组:3[▼ query=>从用户中选择*,其中users.parent\u id位于?、?、?、?、?、?、?和users.deleted\u at为空绑定=>数组:9[▼ 0=>31=>402=>413=>444=>455=>476=>527=>558=>56]time=>0.73]查询日志第2部分:2=>array:3[▼ query=>从用户中选择*,其中,users.parent_id位于?、?、?、?、?、?、?、?、?、?、?、?、、?、?、?、、?、?、?和users.deleted_at为空绑定=>数组:23[▼ 0=>401=>412=>423=>434=>445=>456=>478=>489=>4910=>5011=>5112=>5213=>5314=>5415=>5516=>5617=>5718=>5819=>5920=>6021=>6122=>62]时间=>1.27]你的Laravel版本是什么?试一下我回答中的第二个问题。