在Laravel中覆盖关系

时间:2014-08-12 12:04:58

标签: authentication laravel eloquent relation

我正在根据用户角色限制访问。

如果user-> isAdmin()返回true,我希望能够以某种方式覆盖belongsToMany关系以返回all。

目前拥有AccountController索引方法:

public function index()
{
    if(Auth::user()->isAdmin())   // can this go in beforeFilter? 
        return Account::all();
    else
        return Auth::user()->accounts;
}

在我的用户模型中:

public function accounts()
{
    return $this->belongsToMany("Account");
}

是否有一种巧妙的方法可以在控制器功能中不需要if语句?

1 个答案:

答案 0 :(得分:1)

你不能这样做。

关系方法必须返回Relationotherwise it throws an error

的实例

没有什么可以阻止你为此创建一个单独的方法:

<强> AccountController.php

public function index()
{
    return Auth::user()->userAccounts();
}

<强> user.php的

public function accounts()
{
    return $this->belongsToMany("Account");
}

public function userAccounts()
{
    if ($this->isAdmin()) return Account::all();

    return $this->accounts;
}