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()
我有这些 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()