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版本是什么?试一下我回答中的第二个问题。