没有数据库的Laravel模型?

时间:2017-05-10 01:29:53

标签: php laravel-5 eloquent

我正在开发一个系统,其中我有不同的访问角色。该角色作为整数值存在于Users表中。

我创建了一个名为roles的模型,在这个模型中我不需要数据库连接或表。我确实设置了一些常量值,表示与用户表中的角色字段匹配的角色。

那么问题是什么?如果没有与数据库关联的表,我似乎无法与角色模型建立关系。

这是我的角色模型:

class Roles extends Model {

    const ROL_ADMINISTRADOR = 1;
    const ROL_DIRECTOR = 2;
    const ROL_PROFESOR = 3;
    const ROL_RECOPILADOR = 4;

    private $rol_id;
    private $roles = [
        self::ROL_ADMINISTRADOR => 'Administrador',
        self::ROL_DIRECTOR => 'Director',
        self::ROL_PROFESOR => 'Profesor',
        self::ROL_RECOPILADOR => 'Recopilador'
    ];

    /**
     * RELACIONES
     */
    public function _usuarios() {
        return $this->hasMany(Usuarios::class, "rol", "rol_id");
    }

    /**
     * FORMATEADORES
     */

    /**
     * FUNCIONES
     */

    public function nombre() {
        return $this->roles[$this->rol_id];
    }

}

这是我的用户模型

class Usuarios extends Authenticatable {

    use Notifiable;

    const STATUS_ACTIVO = 1;
    const STATUS_INACTIVO = 0;

    protected $table = 'usuarios';
    protected $primaryKey = 'usuario_id';

    /*
     * RELACIONES
     */

    public function _rol() {
         return $this->hasOne(Roles::class, 'rol', 'rol_id');
    }

    public function _perfil() {
        return $this->hasOne(Perfiles::class, "usuario", "usuario_id");
    }

    /*
     * FORMATEADORES
     */
}

但我收到了这个错误

Base table or view not found: 1146

当我尝试这样做时

<?= Auth::user()->_rol->nombre()  ?>

=============================================== ==========================

我想我已经找到了解决方案。

我做了以下更改:

1.-在角色模型中我添加了构造函数方法并对其进行了自定义

public function __construct($rol) {
        parent::__construct();
        $this->rol_id = $rol;    
}

2.-在用户模型中将方法更改为此

public function _rol() {
        return new Roles($this->usuario_id);
    }

这里有一件事:如果像这样调用方法&#39; _rol&#39;模型会认为是一种关系,需要一种关系反应,所以必须这样称呼它&#39; _rol()&#39; (括号)

<?= Auth::user()->_rol()->nombre() ?>

2 个答案:

答案 0 :(得分:0)

如果您有另一个表来存储角色,则只需要角色模型。 相反,如果您将角色表示为users表中的字段,则只需执行以下操作即可访问:

$role = $user->role;

答案 1 :(得分:0)

我建议您使用https://github.com/artesaos/defender来管理角色和权限。