我有用户表,角色表和user_roles表。如何在用户角色视图中获取用户名和角色名称
用户模型
class User extends Authenticatable{
protected $table = 'user';
protected $dates = ['deleted_at'];
protected $fillable = [
'first_name',
'last_name',
'email',
'gender',
'login_type',
'status',
'password',
];
protected $hidden = [
'password',
'remember_token',
];
public $incrementing = false;
public function roles()
{
return $this->hasMany(UserRole::class);
}
public function scopeEmail($query, $email)
{
return $query->where('email', $email);
}
}
角色模型
<?php
class Role extends Model{
use SoftDeletes;
protected $table = 'role';
protected $dates = ['deleted_at'];
protected $fillable = [
'name',
'description',
'capabilities',
];
public $incrementing = false;
public function scopeName($query, $name)
{
return $query->where('name', $name);
}
}
用户角色模型
class UserRole extends Model{
use SoftDeletes;
protected $table = 'user_role';
protected $dates = ['deleted_at'];
protected $fillable = [
'user_id',
'role_id',
];
public $incrementing = false;
public function user()
{
return $this->belongsTo(User::class)->withTrashed();
}
public function role()
{
return $this->belongsTo(Role::class)->withTrashed();
}
}
答案 0 :(得分:2)
使用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 }}
答案 1 :(得分:1)
{{1}}