Php Laravel获取关系或所有对象
我用的是Laravel5.2。在我的应用程序中,如果用户是管理员,他可以查看所有组。否则,他只能看到他的团队 型号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)
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内联来简化代码。我不知道可以在模型中调用关系作为属性。谢谢!