【问题标题】:Laravel get relationship or all objectsLaravel 获取关系或所有对象
【发布时间】:2016-08-03 07:40:56
【问题描述】:

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

结果

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

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

我尝试了这个:$user->groups() as $group,当用户是管理员时它可以工作,但当它不是管理员时不显示任何内容。

问题

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

如何使用与我的观点相同的语法?

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 我已经使用了一个额外的方法,但是我写了 belongsToMany 内联来简化代码。我不知道可以将关系称为模型内的属性。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2021-02-09
    • 2015-06-12
    • 2021-04-07
    • 2017-12-19
    相关资源
    最近更新 更多