Laravel在同一个表上查询嵌套关系

时间:2018-05-21 15:21:29

标签: 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', 'parent_id');
}

public function parents()
{
    return $this->belongsTo('App\Models\User', 'parent_id');
}

所以,我要做的是:找到孩子没有孩子的所有用户。 在雷曼语中:找到所有有孩子的家庭,但他们的孩子没有孩子。

我知道如何在我必须查询像

之类的直接关系时这样做
User::whereHas('children',function($query){
           // $query;
        })->get();

但不确定如何在嵌套关系中做。

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分:0)

试试这个:

User::whereHas('children', function($query) {
    $query->whereDoesntHave('children');
})->get();

较短但有点违反直觉:

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