Laravel Auth :: user() - > roles() - > get()为空

问题描述 投票:2回答:2

我开始学习一些Laravel。我正在一个网站上工作,你可以创建一个可以拥有角色的帐户,根据你拥有的角色,你可以做些什么。它是什么并不重要,但让我解释整个情况。

我有3张桌子:

  • 一个叫users,它存储有关所有用户的信息。
  • 一个叫qazxsw poi,它存储有关所有角色的信息(只是qazxsw poi + qazxsw poi)
  • 一个名为roles,用于存储用户拥有的角色。它有一个id柱(用于PK),一个name柱(作为FK到user_roles.id)和一个user_id柱(作为FK到users.id

我有2个型号:

模特用户:

role_id

模型角色:

roles

现在,我在我的一个控制器中做的是添加以下行:

id

所以我得到了我的用户,我登录了,我确实添加了一个角色,我确实添加了一个新的user_roles行(我的用户ID和我添加的角色的ID)。但是,var_dump仍然返回一个空数组而不是我拥有的角色。我不明白我做错了什么

php laravel
2个回答
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']; } 是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会将其弄清楚(它是如何做到的也是在文档中)。


0
投票

这不是belongsTo的工作方式,您需要使用不同的关系方法,因为belongsTo检查User模型中不存在的“roles_id”列。

hasManyThrough应该做的诀窍iirc

我不会为你提供直接的解决方案,因为它会更有魅力而不是帮助,但你需要阅读 public function roles() { return $this->belongsToMany('App\Role'); } 的文档

文档提供了如何通过用户表在中间的某个位置获取国家/地区帖子的示例。

© www.soinside.com 2019 - 2024. All rights reserved.