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


Extending the out of the box User model in 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 并使用默认的引导身份验证登录。

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

我忽略了

什么明显的东西吗?

谢谢

不是对你的问题的直接回答,但在两个Roles()User()中,你需要将这些关系返回return $this->belongsTo('App'User', 'user_id', 'id');

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

没有存储在

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

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