Laravel获得关系或所有对象

时间:2016-04-12 15:22:31

标签: php laravel laravel-5 eloquent laravel-5.2

我正在使用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实例。

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

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

1 个答案:

答案 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