2016-04-12 117 views
1

我正在使用Laravel 5.2。在我的应用程序中,如果用户是管理员,他可以看到所有组。否则,他只能看到他的群体。Laravel获取关系或所有对象

型号

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

查看

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

结果

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

关系方法必须返回类型照亮\数据库\雄辩\关系的对象\关系

我尝试这样做,而不是:$user->groups() as $group,当用户是管理员它的工作原理,但什么都不显示时,它不是管理员。

问题

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

我能做些什么来使用与我的观点相同的语法?

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

回答

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 
+0

我已经使用额外的方法,但我写了belongsToMany内联来简化代码。我不知道有可能将关系作为模型中的属性。非常感谢! – Garric15