如何在Laravel 4中获得模型中的相关集合

时间:2014-04-23 15:26:26

标签: laravel laravel-4

假设我有一个名为User的模型,其中定义了几个关系(rolepermissions)。如何直接进入与我的用户模型相关的角色集合或相关的权限集合?

我想做什么:

控制器

if (Auth::user()->hasPermission('test'))
{ // code goes here}

和我的模型

public function hasPermission($name)
    {
        $permission = \Permission::where('name', '=', $name)->get();
        $list = ($this->overwrite_permission) ? $this->permissions : $this->role->permissions;
//here I want to have a collection to use contains()
        if ($list->contains($permission))
        {
            return true;
        }
        return false;
    }

1 个答案:

答案 0 :(得分:2)

你可以这样做,而不是检查收集:

public function hasPermission($name)
{
    return ($this->overwrite_permission)
       ? (bool) $this->permissions()->whereName($name)->first()
       : (bool) $this->role->permissions()->whereName($name)->first();
}

如果权限模型位于相关权限(适当地对用户或角色)或者返回null,则第一个()将获取权限模型,因此转换为布尔值将完成工作。

如果您仍想使用您的代码,这是要更改的行:

// it returns Collection, while you need Model (or its id) for contains() method
$permission = \Permission::where('name', '=', $name)->get();

// change to:
$permission = \Permission::where('name', '=', $name)->first();

其余代码没问题,$ list确实是一个集合(除非你没有正确设置与权限的关系)