首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel::user()->roles()->get()为空

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

Stack Overflow用户
提问于 2018-03-03 23:38:48
回答 2查看 10.4K关注 0票数 2

我刚开始学拉拉维尔。我在一个网站上工作,在那里你可以创建一个帐户,它可以有角色,取决于你的角色,你可以做一些事情。什么是不重要的,但让我解释一下整个情况。

我有三张桌子:

  • 其中一个叫做users,它存储关于所有用户的信息。
  • 一个叫做roles,它存储关于所有角色的信息(只有id + name)
  • 其中一个名为user_roles,它存储用户拥有的角色。它有一个id列(用于PK)、一个user_id列(作为FK到users.id)和一个role_id列(作为FK到roles.id)。

我有两个模特:

模型用户:

代码语言:javascript
复制
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');
     }
}

模范角色:

代码语言:javascript
复制
class Role extends Model
{
    protected $table = 'roles';

    protected $fillable = ['role'];
}

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

代码语言:javascript
复制
var_dump(Auth::user()->roles()->get())

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-03-03 23:53:31

User - Role是一种M:M关系.一个用户可以有多个角色,一个角色也可以被许多用户使用。

对于多到多的关系,Laravel (雄辩)提供了belongsToMany方法。这是文档:https://laravel.com/docs/5.6/eloquent-relationships#many-to-many

因此,需要在User类中替换此方法:

代码语言:javascript
复制
 public function roles() {
     return $this->belongsTo('App\Role');
 }

在这方面:

代码语言:javascript
复制
 public function roles() {
     return $this->belongsToMany('App\Role');
 }

此外,您还需要告诉Laravel枢轴表的名称。您可以将它作为第二个参数传递给belongsToMany方法,或者只需将其命名为roles_users,Laravel就会找到它(它是如何在docs中实现的)。

票数 2
EN

Stack Overflow用户

发布于 2018-03-03 23:49:59

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

hasManyThrough应该做好iirc的工作

我不会为您提供直接的解决方案,因为它会带来更多的魅力而不是帮助,但是您需要阅读https://laravel.com/docs/5.6/eloquent-relationships的文档。

文档中有如何通过位于中间的某个用户表获取国别帖子的示例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49090403

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档