Php 拉威尔雄辩模型关系

Php 拉威尔雄辩模型关系,php,laravel,eloquent,entrust,eloquent-relationship,Php,Laravel,Eloquent,Entrust,Eloquent Relationship,我的应用程序建立在 Laravel: 5.6.35 PHP 7.2.4 Entrust: 1.9 我的榜样 class Role extends EntrustRole { public function permissions() { return $this->belongsToMany(Permission::class); } public function users() { return $this-&

我的应用程序建立在

Laravel: 5.6.35
PHP 7.2.4
Entrust: 1.9
我的榜样

class Role extends EntrustRole
{
    public function permissions()
    {
        return $this->belongsToMany(Permission::class);
    }

    public function users()
    {
        return $this->hasMany(User::class);
    }
}
我的用户模型是

class User extends Authenticatable
{
    public function role()
    {
        return $this->belongsTo(Role::class);
    } 
}
现在你可以在Tinker中注意到

D:\work\www\myapp>php artisan tinker
Psy Shell v0.9.7 (PHP 7.2.4 — cli) by Justin Hileman
>>> App\models\Role::find(1)->users()->get()
Illuminate/Database/QueryException with message 'SQLSTATE[42S22]: Column not found: 1054 Unknown column 'users.role_id' in 'where clause' (SQL: select * from `users` where `users`.`role_id` = 1 and `users`.`role_id` is not null)'
>>> App\User::find(1)->role()->get();
=> Illuminate\Database\Eloquent\Collection {#2937
     all: [],
   }
>>> App\User::find(1)->roles()->get();
=> Illuminate\Database\Eloquent\Collection {#2941
     all: [
       App\models\Role {#2930
         id: 1,
         name: "super-admin",
         display_name: "Super Admin",
         description: "This will be one permission, that can not be assigned or modified.",
         created_at: "2018-09-07 12:11:35",
         updated_at: "2018-09-07 12:11:35",
         pivot: Illuminate\Database\Eloquent\Relations\Pivot {#2927
           user_id: 1,
           role_id: 1,
         },
       },
     ],
   }
我正在获取
App\User::find(1)->roles()
的结果,但我的用户模型具有函数
role()
,并且
App\User::find(1)->role()
的集合为空,
App\models\role::find(1)->users()


因此,请给出一些想法,如何解决这个问题?

按照您定义关系的方式,您必须明确要求检索该关系:

App\User::with('Roles')->find(1)->roles()
在文档中,用户和角色之间的关系如下:

class Role extends Model
{
    public function users()
    {
        return $this->belongsToMany('App\User');
    }
}

class User extends Model
{
    public function roles()
    {
        return $this->belongsToMany('App\Role');
    }
}

这样,您就不必询问关系了

我想我找到了我问题的答案。如果您通过模型中的hasMany和belongsTo正确定义了关系,但没有在属于其他表的模型表中提供外键,那么您的关系将不起作用。在文档中也建议使用外键来使用关系


委托数据库的设计是基于多对多关系的。因此,用户可以有多个角色。如Laravel中所述。

问题要么在于关系的创建方式,要么在于表中,错误表示

 Unknown column 'users.role_id' in 'where clause'
这意味着,当您建立如下关系时,users表中缺少列
role\u id

public function users()
{
    return $this->hasMany(User::class);
}

hasMany将尝试在您传递的模型中查找
tablename\u id
,如果您想通过第三个表获得它们,您可以在
权限
模型上使用
belongTomany
或使用那么,在
用户
模型中定义方法并定义关系有什么意义呢,
Role
User
具有
One-To-Many
关系,
Role()
应该返回与指定用户关联的角色,对吗?我想要的是hasMany关系而不是多对多关系。如果角色给出结果,为什么不简单地将角色更改为用户模型中的角色。是否有字段您的用户表中的“role_id”?@Carlossalzar否,但他们的表是另一个维护role_用户关系的表。否,我的模型使用一对五关系。请查看我的答案以了解解释。