Php 雄辩的质疑多重关系深刻

Php 雄辩的质疑多重关系深刻,php,laravel,laravel-4,eloquent,Php,Laravel,Laravel 4,Eloquent,我有3个模型在讨论中。公司、用户、组。我正在尝试返回其创建者(用户)具有我指定的(组)的所有公司记录 Company.php public function user() { return $this->belongsTo('User'); } User.php public function company() { return $this->hasMany('Company')->orderBy('created_at', 'desc'); } publ

我有3个模型在讨论中。公司、用户、组。我正在尝试返回其创建者(用户)具有我指定的(组)的所有公司记录

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格式的输出-

尝试过这个,但不起作用:

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