在Laravel中扩展开箱即用的用户模型

时间:2016-02-27 13:52:14

标签: php laravel authentication laravel-5 eloquent

首先 - 请原谅无知,我是Laravel的新手。 :)

我在Laravel玩游戏时,在扩展开箱即用的User模型时遇到了问题。我想实现一个基本的角色概念,应该简单地表示为User的属性。

我已创建默认的用户模型和身份验证:

  

artisan make:auth

从那起,产生了:

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并使用默认的bootstrapped auth登录。

我期望看到的是用户模型的角色集合,但我没有。 print_r显示默认用户模型,没有其他属性。

有什么明显的东西可以忽略吗?

谢谢,

2 个答案:

答案 0 :(得分:1)

Roles()方法只是定义您User模型与UserRoles模型之间关系的方法。实际上它返回了一个Relation对象的实例,你可以在其上玩

没有User模型中存储的角色的属性:您应该调用Auth::user()->Roles()->get()对数据库进行查询并返回Collection UserRoles 1}}

或者,您可以使用将从DB延迟加载关系的动态属性Auth::user()->Roles;来访问该集合

答案 1 :(得分:1)

不能直接回答您的问题,但在Roles()User()中,您需要返回这些关系return $this->belongsTo('App\User', 'user_id', 'id');