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

时间:2016-11-20 13:57:09

标签: php laravel model relationships

我有用户表,角色表和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();
    }
}

2 个答案:

答案 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}}