我正在开发一个系统,其中我有不同的访问角色。该角色作为整数值存在于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() ?>
答案 0 :(得分:0)
如果您有另一个表来存储角色,则只需要角色模型。 相反,如果您将角色表示为users表中的字段,则只需执行以下操作即可访问:
$role = $user->role;
答案 1 :(得分:0)
我建议您使用https://github.com/artesaos/defender来管理角色和权限。