Php Laravel获取关系或所有对象

Php Laravel获取关系或所有对象,php,laravel,laravel-5,eloquent,laravel-5.2,Php,Laravel,Laravel 5,Eloquent,Laravel 5.2,我用的是Laravel5.2。在我的应用程序中,如果用户是管理员,他可以查看所有组。否则,他只能看到他的团队 型号 public function groups() { if ($this->isAdmin()) { return \App\Group::get(); } return $this->belongsToMany('App\Group'); } 查看 @foreach($user->groups as $group)

我用的是Laravel5.2。在我的应用程序中,如果用户是管理员,他可以查看所有组。否则,他只能看到他的团队

型号

public function groups() {
    if ($this->isAdmin()) {
        return \App\Group::get();
    }
    return $this->belongsToMany('App\Group');
}
查看

@foreach($user->groups as $group) 
    {{ $group->name }}
@endforeach
结果

如果用户不是管理员,上面的代码就可以工作,但是如果用户是管理员,我会得到这个错误

Relationship方法必须返回Illumb\Database\Eloquent\Relations\Relationship类型的对象

我试过这样做:
$user->groups()作为$group
,当用户是管理员时它可以工作,但当用户不是管理员时它什么也不显示

问题

我知道当我调用一个关系作为属性(
$user->groups
)时,它返回一个对象集合。相反,如果我将其作为函数调用(
$user->groups()
),则会得到一个QueryBuilder实例

如何使用与视图中相同的语法


注意:我无法将数据库中的所有组添加到管理员,因为管理员必须没有组。

方法不是直接使用关系,而是使用额外的方法来处理

首先,在模型中创建简单关系:

public function groups() 
{
    return $this->belongsToMany('App\Group');
}
然后创建额外的方法:

public function availableGroups() 
{
    if ($this->isAdmin()) {
        return \App\Group::get();
    }
    return $this->groups;
}
现在,在视图中,您可以使用:

@foreach($user->availableGroups() as $group) 
    {{ $group->name }}
@endforeach

我已经使用了一个额外的方法,但是我编写了belongAsmany内联来简化代码。我不知道可以在模型中调用关系作为属性。谢谢!