我刚开始学拉拉维尔。我在一个网站上工作,在那里你可以创建一个帐户,它可以有角色,取决于你的角色,你可以做一些事情。什么是不重要的,但让我解释一下整个情况。
我有三张桌子:
users,它存储关于所有用户的信息。roles,它存储关于所有角色的信息(只有id + name)user_roles,它存储用户拥有的角色。它有一个id列(用于PK)、一个user_id列(作为FK到users.id)和一个role_id列(作为FK到roles.id)。我有两个模特:
模型用户:
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仍然返回一个空数组,而不是我所扮演的角色。我不明白我做错了什么
发布于 2018-03-03 23:53:31
User - Role是一种M:M关系.一个用户可以有多个角色,一个角色也可以被许多用户使用。
对于多到多的关系,Laravel (雄辩)提供了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就会找到它(它是如何在docs中实现的)。
发布于 2018-03-03 23:49:59
这不是belongsTo的工作方式,您需要使用不同的关系方法,因为belongsTo检查用户模型中不存在的"roles_id“列。
hasManyThrough应该做好iirc的工作
我不会为您提供直接的解决方案,因为它会带来更多的魅力而不是帮助,但是您需要阅读https://laravel.com/docs/5.6/eloquent-relationships的文档。
文档中有如何通过位于中间的某个用户表获取国别帖子的示例。
https://stackoverflow.com/questions/49090403
复制相似问题