我开始学习一些 Laravel。我正在开发一个网站,您可以在其中创建一个帐户,该帐户可以具有角色,并且根据您拥有的角色,您可以做一些事情。具体是什么并不重要,但让我解释一下整个情况。
我有 3 张 table :
- 一个称为
users
,它存储有关所有用户的信息。 - 一个称为
roles
,它存储有关所有角色的信息(仅id
+name
) - 名为
user_roles
,用于存储用户拥有的角色。它有一个id
列(用于 PK)、一个user_id
列(作为 FK 到users
.id
)和role_id
列(作为roles
.id
的 FK)
我有 2 个型号:
模型用户:
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password', 'mood'
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
public function roles() {
return $this->belongsTo('App\Role');
}
}
模型角色:
class Role extends Model
{
protected $table = 'roles';
protected $fillable = ['role'];
}
现在,我在一个 Controller 中所做的是添加以下行:
var_dump(Auth::user()->roles()->get())
所以我得到了我的用户,我登录了,我添加了一个角色,并且添加了一个新的 user_roles 行(包含我的用户 ID 和我添加的角色的 ID)。但是,var_dump 仍然返回一个空数组,而不是我所拥有的角色。我不明白我做错了什么
最佳答案
用户
- 角色
是M:M关系。一个用户可以拥有多个角色;而且,一个角色可以被多个用户使用。
对于多对多关系,Laravel (Eloquent) 提供了 belongsToMany
方法。这是文档:https://laravel.com/docs/5.6/eloquent-relationships#many-to-many
因此,您需要在 User
类中替换此方法:
public function roles() {
return $this->belongsTo('App\Role');
}
这样:
public function roles() {
return $this->belongsToMany('App\Role');
}
此外,您需要告诉 Laravel 数据透视表的名称。您可以将其作为第二个参数传递给 belongsToMany
方法,或者将其命名为 roles_users
,Laravel 会弄清楚它(它是如何做到的,也在文档中) )。
关于php - Laravel Auth::user()->roles()->get() 为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49090403/