我开始学习一些Laravel。我正在一个网站上工作,你可以创建一个可以拥有角色的帐户,根据你拥有的角色,你可以做些什么。它是什么并不重要,但让我解释整个情况。
我有3张桌子:
users
,它存储有关所有用户的信息。roles
,用于存储用户拥有的角色。它有一个id
柱(用于PK),一个name
柱(作为FK到user_roles
.id
)和一个user_id
柱(作为FK到users
.id
)我有2个型号:
模特用户:
role_id
模型角色:
roles
现在,我在我的一个控制器中做的是添加以下行:
id
所以我得到了我的用户,我登录了,我确实添加了一个角色,我确实添加了一个新的user_roles行(我的用户ID和我添加的角色的ID)。但是,var_dump仍然返回一个空数组而不是我拥有的角色。我不明白我做错了什么
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'];
}
是M:M的关系。一个用户可以有很多角色;而且,许多用户可以使用一个角色。
对于多对多关系,Laravel(Eloquent)提供了var_dump(Auth::user()->roles()->get())
方法。这是文档:User
因此,您需要在Role
类中替换此方法:
belongsToMany
有了这个:
https://laravel.com/docs/5.6/eloquent-relationships#many-to-many
此外,您需要告诉Laravel数据透视表的名称。您可以将它作为第二个参数传递给User
方法,或者只是将其命名为 public function roles() {
return $this->belongsTo('App\Role');
}
,而Laravel会将其弄清楚(它是如何做到的也是在文档中)。
这不是belongsTo的工作方式,您需要使用不同的关系方法,因为belongsTo检查User模型中不存在的“roles_id”列。
hasManyThrough应该做的诀窍iirc
我不会为你提供直接的解决方案,因为它会更有魅力而不是帮助,但你需要阅读 public function roles() {
return $this->belongsToMany('App\Role');
}
的文档
文档提供了如何通过用户表在中间的某个位置获取国家/地区帖子的示例。