我正在使用Laravel 5.2。在我的应用程序中,如果用户是管理员,他可以看到所有组。否则,他只能看到他的团体。
模型
public function groups() {
if ($this->isAdmin()) {
return \App\Group::get();
}
return $this->belongsToMany('App\Group');
}
查看
@foreach($user->groups as $group)
{{ $group->name }}
@endforeach
结果
如果用户不是管理员,则上述代码有效,但如果用户是管理员,则会收到此错误
关系方法必须返回类型为Illuminate \ Database \ Eloquent \ Relations \ Relation
的对象
我尝试了这个:$user->groups() as $group
,它在用户是管理员时有效,但在不是管理员时则不显示。
问题
我知道当我将关系称为属性($user->groups
)时,它会返回一个对象集合。相反,如果我将其称为函数($user->groups()
),我将得到一个QueryBuilder实例。
如何使用与我视图中相同的语法?
注意:我无法将数据库中的所有群组添加到管理员,因为管理员必须没有群组。
答案 0 :(得分:1)
方法不是直接使用关系,而是使用额外的方法来处理这个问题。
首先在模型中创建简单的关系:
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