拉拉维尔雄辩的模范关系



我的应用建立在

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);
} 
}

现在你可以在廷克注意到

D:workwwwmyapp>php artisan tinker
Psy Shell v0.9.7 (PHP 7.2.4 — cli) by Justin Hileman
>>> AppmodelsRole::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)'
>>> AppUser::find(1)->role()->get();
=> IlluminateDatabaseEloquentCollection {#2937
all: [],
}
>>> AppUser::find(1)->roles()->get();
=> IlluminateDatabaseEloquentCollection {#2941
all: [
AppmodelsRole {#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: IlluminateDatabaseEloquentRelationsPivot {#2927
user_id: 1,
role_id: 1,
},
},
],
}

我得到了AppUser::find(1)->roles()的结果,但我的用户模型具有函数role()AppUser::find(1)->role()的空集合和AppmodelsRole::find(1)->users()的错误

集合所以请给出一些想法,如何解决这个问题?

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

AppUser::with('Roles')->find(1)->roles()

在文档中,用户和角色之间的关系是这样的:

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

这样,您就不必要求关系

错误说,问题要么是你的关系的创建方式,要么是你的表格

Unknown column 'users.role_id' in 'where clause'

这意味着在您的用户表中缺少列role_id,当您建立类似

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

hasMany 将尝试在你传递的模型中查找tablename_id,如果你想通过第三个表获取它们,你可以在你的permission模型上使用belongsToMany或使用多态关系

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

委托数据库设计基于多对多关系。以便该用户可以具有多个角色。Purly 如 Laravel 文档中所述。

相关内容

  • 没有找到相关文章

最新更新