【发布时间】:2018-08-11 22:11:03
【问题描述】:
我开始学习一些 Laravel。我正在一个网站上工作,您可以在其中创建一个帐户,该帐户可以具有角色,并且根据您拥有的角色,您可以做一些事情。它是什么并不重要,但让我解释一下整个情况。
我确实有 3 张桌子:
- 一个叫做
users,它存储所有用户的信息。 - 一个名为
roles,它存储有关所有角色的信息(仅id+name) - 一个叫
user_roles,它存储用户拥有哪些角色。它有一个id列(用于PK)、一个user_id列(作为FK 到users.id)和一个role_id列(作为FK 到roles.id)
我确实有 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'];
}
现在,我在其中一个控制器中所做的是添加以下行:
var_dump(Auth::user()->roles()->get())
所以我得到了我的用户,我已经登录,我确实添加了一个角色,我确实添加了一个新的 user_roles 行(带有我的用户 ID 和我添加的角色的 ID)。但是, var_dump 仍然返回一个空数组,而不是我所拥有的角色。我不明白我做错了什么
【问题讨论】:
-
我应该用 hasMany 替换 belongsTo ,这取决于你想如何对待角色,可能是多对多的关系