Laravel 5.1约束并急切加载多个嵌套关系

时间:2017-09-21 08:29:00

标签: php laravel-5.1 eager-loading laravel-eloquent

我有四个模型:OwnerCompany,所有者,用户和角色。

我想让所有OwnerCompanys急切地加载他们的所有者,并且还急于加载 具有名称'admin'角色的用户。

scope.pageData = {};
scope.hideIt = function () {
  scope.pageData.showIt = false;
};

这在模型中加载但不限制用户,它们都被加载。

3 个答案:

答案 0 :(得分:0)

未经测试。我认为你缺少相同或相同的操作员。

OwnerCompany::with('owner.users')->whereHas('owner.users.roles', function ($query) {
    $query->where('name','like','admin');
})->get();

答案 1 :(得分:0)

我试试这个,如果工作那么告诉我。 未经过测试

1)。

OwnerCompany::with('owner.users.roles')->whereHas('owner', function ($query) {
    $query->whereHas('users', function($qr){
        $qr->whereHas('roles', function($q){
          $q->where('name', 'admin');
        });
    });
})->get();

OR

2)。

OwnerCompany::with('owner.users.roles')->whereHas('owner.users.roles', function ($query) {
    $query->where('name', 'admin');
})->get();

答案 2 :(得分:0)

如果我做对了,你希望每个include对象包含OwnerCompany对象,其中包含“admins”。我会做这样的事情。

Owner

$ownerCompany = OwnerCompany::all(); return $ownerCompany->each(function ($company) { $company->owner; $company->owner->users->each(function ($user) { return $user->hasRole('admin'); }); }); 内部:

User

不幸的是,我现在无法测试,所以如果您有任何问题请告诉我。