2017-05-10 3 views
0

私は、私がアクセスするための異なる役割を持っているシステムを開発しています。ロールは、整数値としてUsersテーブルに存在します。データベースのないLaravelモデル?

私はロールというモデルを作成しました。このモデルでは、データベース接続やテーブルは必要ありません。私は、ユーザーテーブル内のロールフィールドに一致するロールを表すいくつかの定数値を設定しました。

だから何が問題なのですか?これは、データベースに関連付けられているテーブルがない場合、私はロールモデルとの関係を持つことができないようです。

これが私の役割モデルである:これは私のユーザモデル

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 
    */ 
} 

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]; 
    } 

} 

ですが、私はこの

をしようとすると、私はこのエラー

Base table or view not found: 1146 

を得ました

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

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

私は解決策を見つけたと思います。

私は次の変更をした:私は、コンストラクタメソッドを追加しました役割モデルで

1.-とユーザーモデルでは

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

2.-それをカスタマイズしたが、この

に方法を変更します

ここには何かがあります:この '_rol'のようにメソッドが呼び出されると、モデルはリレーションに関するものであり、リレーションの応答が必要なので、それを呼び出す必要がありますこのように '_rol()'(かっこ付き)

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

あなたはそれを解決しましたか?または助けが必要な場合 – Exprator

+0

はい。問題は解決しました –

答えて

0

ロールを格納する別のテーブルがある場合は、ロールモデルが必要です。 あなたは、代わりに、ユーザーテーブルのフィールドとして表さ役割を持っている場合は、あなただけやってそれにアクセスすることができます

$role = $user->role; 
+0

しかし、多くの役割があり、また、私はロールモデルからユーザーを照会したいです。 –