Laravel 5 与条件的嵌套关系

Laravel 5 nested relation with condition

我有这些 table:

用户

|id|role_id|clan_id|

角色

|id|slug|

氏族

|id|

我需要抓取 slug 所在的所有用户 'leader'

我该怎么做?

到目前为止我得到了什么:

class clan extends Model{
    public function leader() 
    {
        $leader = User::whereHas('role', function($query) {
            $query->where('slug', 'leader');
        })->where('clan_id', $this->id)->get();

        return $leader;
    }
}

但这并不明智。而不是这个我想让它加入我的氏族table

氏族:

|id|leader_user_id|

所以我可以轻松访问它。

非常感谢:)

您可以在氏族和用户之间创建 one-to-many 关系:

public function users()
{
    return $this->hasMany('App\User');
}

在你的 leader() 函数中你可以这样写:

public function leader() 
{
    $leader = $this->users()->whereHas('role', function($query) {
        $query->where('slug', 'leader');
    })->get();

    return $leader;
}

更新

回复下方评论

您可以创建一个范围:

public function scopeLeader($query)
{
    return $query->with(['users' => function($query) {
               $query->whereHas('role', function($q) {
                    $q->where('slug', 'leader');
                });
}

并且您可以获取 Clan 作为:

Clan::where('name', $clanname)->leader()->get()