Laravel多对多关系字段名称

Laravel多对多关系字段名称,laravel,eloquent,eloquent-relationship,Laravel,Eloquent,Eloquent Relationship,我有一个用户表和一个权限表。一个用户可以有多个权限,一个权限可以有多个用户: USER ID | PERMISSION ID 1 | 1 1 | 2 2 | 1 2 | 1 有一个名为permission_user的链接表,由Laravel规范定义,用于自动推断这些表 如果我定义以下函数: 用户模型: 公共功能权限() { 返回$this->belongtomany('App\Permission'); } 权限模型: 公共功能用户() { 返回$this->belongtomany('Ap

我有一个用户表和一个权限表。一个用户可以有多个权限,一个权限可以有多个用户:

USER ID | PERMISSION ID
1 | 1
1 | 2
2 | 1
2 | 1
有一个名为permission_user的链接表,由Laravel规范定义,用于自动推断这些表

如果我定义以下函数:

用户模型:

公共功能权限()
{
返回$this->belongtomany('App\Permission');
}
权限模型:

公共功能用户()
{
返回$this->belongtomany('App\User');
}
调用
App\User::first()->Permissions()->attach(App\Permission::first())时出错上面说

 Illuminate\Database\QueryException  : SQLSTATE[42S22]: Column not found: 1054 Unknown column '' in 'field list' (SQL: insert into `permission_user` (``, `user_id`) values (3, 1))
数据库迁移文件:


根据laravel文档:

[…]许多用户可能担任“管理员”角色。要定义此关系,需要三个数据库表:
users
roles
role\u user
role\u user
表根据相关型号名称的字母顺序派生,并包含
user\u id
role\u id

链接表必须仅包含每个模型的外键。否则,您需要指定正在使用的关系表以及关系的每个模型的主键,如laravel文档中所指定的

正如我在评论部分所说,如果您仅使用
permission\u id
user\u id
列创建
permission\u user
表,并将这些列作为主键,那么它将按预期工作:

Schema::create('permission\u user',函数(Blueprint$表){
$table->unsignedbiginger('permission_id');
$table->unsignedbiginger('user_id');
$table->foreign('permission_id')->引用('id')->on('permissions');
$table->foreign('user_id')->references('id')->on('users');
$table->primary(['permission\u id','user\u id']);
});
是我为处理用户权限而开发的一个包,您可以通过单击来检查
user\u has\u permissions
表定义,它基本上是一个与
permission\u user
表完全相同的表


希望有帮助。

您的数据库中是否存在权限?它们是实际存储的吗?您是否使用只包含
user\u id
permission\u id
字段的
permission\u user
表进行了尝试,但没有时间戳和id?另外,将
user\u id
permission\u id
都设置为此表的主键。您可以发布完整的权限模型吗?@mateuswunges看起来解决了这个问题。我在带有时间戳的链接表上有一个主键id,我不确定这有什么关系,因为这是一个相当标准的东西。要按预期工作,链接表必须只包含每个关系模型的主键。如果需要这些附加列,则必须在定义
belongToMany
关系时指定关系表和每个表的主键。