LARAVEL 5.3,获取用户名和角色名(使用 Laravel 模型关系)

Posted

技术标签:

【中文标题】LARAVEL 5.3,获取用户名和角色名(使用 Laravel 模型关系)【英文标题】:LARAVEL 5.3, Get User Name and Role Name (Using Laravel Model Relationships) 【发布时间】:2017-04-03 22:41:00 【问题描述】:

测试语法或拼写错误 ► 澄清含义而不改变它 ► 纠正小错误 ► 添加相关资源或链接 ► 永远尊重原作者

【问题讨论】:

看起来你需要定义一个多对多的关系。 function roles()return $this->belongsToMany(Role::class, 'user_role'); @PaulSpiegel 在用户模型public function roles() return $this->hasMany(UserRole::class); 上还不够@ 【参考方案1】:

使用eager loading获取数据:

$user = User::where('id', $userId)->with('roles')->first();

然后显示数据:

-- Display full name --
 $user->first_name.' '.$user->last_name 

-- Display all role names of the user --
@foreach ($user->roles as $role)
     $role->name 
@endforeach

我猜这里的关系是多对多的,所以你需要将roles()关系更改为belongsToMany()

如果您正在使用一些具有多对多关系的包,但您只为用户附加了一个角色,您可以使用以下内容显示角色名称:

 $user->roles->first()->name 

另外,您可以使用accessor 获取全名:

public function getFullNameAttribute($value)

    return $this->first_name.' '.$this->last_name;

使用访问器显示全名:

 $user->full_name 

【讨论】:

嘿,谢谢伙计!我需要所有用户(所以没有用户 ID),但我想得到它。但是,` $userrole->role->name //--工作正常 @foreach ($userrole->role as $role) $role->name // 抛出错误 @endforeach ` ANY想法?? @Vinuvasudev 为什么你使用$userrole 而不是$user 实际上是在用户角色链接(所以 userrole).. 列出所有用户及其角色的单个页面!并且角色可以是多个(一对多) @Vinuvasudev 您需要获取所有用户及其角色,因此您需要在此处使用User 模型。 User::with('roles')->get(); 然后迭代 $users。另外,由于您有带有user_idrole_id 的数据透视表,它是many to many relationship,您应该使用belongsToMany() 我有一个用户角色表(你可以在那里看到我的 UserRole 模型)所以需要列出所有用户、角色!目前一切正常,除了很多!但是当我输入belongToMany 时,出现一个显示不存在表名和所有表名的sql 查询错误【参考方案2】:
@foreach($users as $user)
$user->name  $user->roles->first()->name

@endforeach

【讨论】:

以上是关于LARAVEL 5.3,获取用户名和角色名(使用 Laravel 模型关系)的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 4.2 Eloquent 获取特定用户和特定角色

完整性约束违规:1048 Column 'user_id' cannot be null 分配角色时发生错误(Laravel 5.3)

使用存储过程获取应用用户角色、有效用户登录名

Laravel 护照范围

Laravel 5.3 auth 检查构造函数返回 false

Laravel 5.3 Auth 阻止用户