2017-05-10 1 views
0

나는 서로 다른 역할을하는 시스템을 개발 중이다. 역할은 사용자 테이블에 정수 값으로 표시됩니다.데이터베이스가없는 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

하지만 많은 역할이 있고 역할 모델에서 사용자를 쿼리하려고합니다. –