首页 > 解决方案 > Laravel查询同一张表上的嵌套关系

问题描述

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

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();

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

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

标签: phplaravel-5

解决方案


请像这样在您的模型上更改一些

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

推荐阅读