eloquent 深度查询多个关系
eloquent query multiple relations deep
我有 3 个模型有问题。公司、用户、组。我正在尝试 return 其创建者(用户)具有我指定的(组)内容的所有公司记录。
Company.php
public function user() {
return $this->belongsTo('User');
}
User.php
public function company()
{
return $this->hasMany('Company')->orderBy('created_at', 'desc');
}
public function group()
{
return $this->belongsToMany('Group')->withTimestamps();
}
public function hasGroup($check)
{
if(is_array($check)) {
$groups = array_fetch($this->group->toArray(), 'name_short');
return !!array_intersect($check, $groups) ? true : false;
} else {
return in_array($check, array_fetch($this->group->toArray(), 'name_short'));
}
}
Group.php
public function user(){
return $this->belongsToMany('User');
}
我知道如何查询直接相关的模型。不确定从哪里开始处理与直接相关模型相关的模型。
以下只是一个概念,不是可行的代码。我认为它会如何工作。
$companies = Company::where('active','=','1')where($this->user->hasGroup(array('admin','moderator','subscriber')));
这让我得到了我正在寻找的东西。
$c = Company::with('user.group')->where('active','=',1)->get();
它有点显示我需要的东西,只是不知道如何只显示具有特定公司->用户->组所有权的记录。为了便于阅读,这是 JSON 中的输出 - http://pastebin.com/wFTi9ye0
试过了,没用:
$names = array('subscriber','user');
$c = Company::with(array('user.group' => function($query) use($names)
{
$query->whereIn('name_short', $names)
}))->get();
.编辑。
刚试过这个:
$c = Company::whereHas('user', function($q)
{
$q->whereHas('group', function($q)
{
$q->where('name_short', '=', 'user');
});
});
#print_r($c->toJSON());
print_r($c);
浏览器崩溃。我觉得我很接近。有什么想法吗?
想通了:)
$c = Company::where('active','=',1)->whereHas('user', function($q)
{
$q->whereHas('group', function($q)
{
$q->whereIn('group.name_short', array('admin','user'));
});
})->get();
我有 3 个模型有问题。公司、用户、组。我正在尝试 return 其创建者(用户)具有我指定的(组)内容的所有公司记录。
Company.php
public function user() {
return $this->belongsTo('User');
}
User.php
public function company()
{
return $this->hasMany('Company')->orderBy('created_at', 'desc');
}
public function group()
{
return $this->belongsToMany('Group')->withTimestamps();
}
public function hasGroup($check)
{
if(is_array($check)) {
$groups = array_fetch($this->group->toArray(), 'name_short');
return !!array_intersect($check, $groups) ? true : false;
} else {
return in_array($check, array_fetch($this->group->toArray(), 'name_short'));
}
}
Group.php
public function user(){
return $this->belongsToMany('User');
}
我知道如何查询直接相关的模型。不确定从哪里开始处理与直接相关模型相关的模型。
以下只是一个概念,不是可行的代码。我认为它会如何工作。
$companies = Company::where('active','=','1')where($this->user->hasGroup(array('admin','moderator','subscriber')));
这让我得到了我正在寻找的东西。
$c = Company::with('user.group')->where('active','=',1)->get();
它有点显示我需要的东西,只是不知道如何只显示具有特定公司->用户->组所有权的记录。为了便于阅读,这是 JSON 中的输出 - http://pastebin.com/wFTi9ye0
试过了,没用:
$names = array('subscriber','user');
$c = Company::with(array('user.group' => function($query) use($names)
{
$query->whereIn('name_short', $names)
}))->get();
.编辑。 刚试过这个:
$c = Company::whereHas('user', function($q)
{
$q->whereHas('group', function($q)
{
$q->where('name_short', '=', 'user');
});
});
#print_r($c->toJSON());
print_r($c);
浏览器崩溃。我觉得我很接近。有什么想法吗?
想通了:)
$c = Company::where('active','=',1)->whereHas('user', function($q)
{
$q->whereHas('group', function($q)
{
$q->whereIn('group.name_short', array('admin','user'));
});
})->get();