2016-02-27 3 views
3

Прежде всего - простите невежество, я новичок в Laravel. :)Расширение из окна Модель пользователя в Laravel

Я играю в Ларавеле, и я сталкиваюсь с проблемой, когда расширяю из коробки User модель. Я хотел бы реализовать базовую концепцию ролей, которая должна быть просто представлена ​​как свойство User.

Я создал модель по умолчанию и аутентификация пользователей:

ремесленник делают: аутентификации

Оттуда, который произвел:

namespace App; 

use Illuminate\Foundation\Auth\User as Authenticatable; 

class User extends Authenticatable 
{ 
    /** 
    * The attributes that are mass assignable. 
    * 
    * @var array 
    */ 
    protected $fillable = [ 
     'name', 'email', 'password', 
    ]; 

    /** 
    * The attributes excluded from the model's JSON form. 
    * 
    * @var array 
    */ 
    protected $hidden = [ 
     'password', 'remember_token', 
    ]; 
} 

Я также создал UseRoles и попытался создать взаимосвязь между ними:

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class UserRoles extends Model 
{ 
    protected $table = 'user_roles'; 

    public function User() 
    { 
     $this->belongsTo('App\User', 'user_id', 'id'); 
    } 
} 

И над в User модели я добавил:

public function Roles() 
{ 
    $this->hasMany('App\UserRoles', 'user_id', 'id'); 
} 

Наконец, я побежал сценарии миграции и запуска сервера, нажмите Localhost и войти в систему, используя по умолчанию бутстрапированная Авт.

То, что я ожидаю увидеть, представляет собой коллекцию Roles от модели User, но я этого не делаю. В print_r отображается модель пользователя по умолчанию без дополнительных свойств.

Есть ли что-то очевидное, что я не замечаю?

Спасибо,

ответ

1

Метод Roles() только метод определения отношения между вами User моделью и UserRoles модели. На самом деле она возвращает экземпляр Relation объекта, на котором вы можете играть с

Существует не свойство с ролями, хранящихся в User модели: вы должны вызвать Auth::user()->Roles()->get() сделать запрос на БД и получить обратно Collection из UserRoles

в качестве альтернативы, вы можете получить доступ к коллекции, используя динамическое свойство Auth::user()->Roles; что будет отложенной загрузки отношения с DB

+1

Спасибо за информацию - именно то, что я искал! –

1

не прямой ответ на ваш вопрос, но в обоих Roles() анс User() вам нужно вернуть эти отношения return $this->belongsTo('App\User', 'user_id', 'id');