1

我正在安装 laravel 4 包 Entrust。我创建了迁移文件。当我尝试运行迁移时,我收到有关外键约束的错误。这是关于某些 PhpMyAdmin 设置的一个问题吗?我直接从powershell复制错误:

PS C:\wamp\www\lab\x_pat> php artisan entrust:migration

表:roles、assigned_roles、permissions、permission_role 创建 'roles'、'assigned_roles'、'permissions'、'permission_role' 表的迁移将在 app/data base/migrations 目录中创建

继续创建迁移?[是|否]是

正在创建迁移... 已成功创建迁移!

PS C:\wamp\www\lab\x_pat> php artisan 迁移

迁移表创建成功。

[异常] SQLSTATE [HY000]:一般错误:1215 无法添加外键约束(SQL:alter table assigned_rolesadd constraintassigned_roles_user_id_foreign 外键(user_id)引用usersid))(绑定:数组())

[PDOException] SQLSTATE[HY000]:一般错误:1215 无法添加外键约束

迁移 [--bench[="..."]] [--database[="..."]] [--path[="..."]] [--package[="... "]] [--假装] [--种子]

4

5 回答 5

1

外键约束不是由 phpMyAdmin(它是一个 Web 界面)强制执行的,而是由 MySQL 服务器强制执行的。

这个错误有很多可能性;这可能是因为表的结构不允许这样做(例如缺少索引),或者是因为现有数据本身不尊重您要添加的约束。

于 2013-09-19T18:47:04.247 回答
1

该错误是由于添加外键 (user_id) 引用用户 (id) 时缺少引用。请确保在运行委托迁移之前存在用户表。

于 2013-12-17T01:18:11.207 回答
1

我必须确保我的用户表的“id”列属性设置为“无符号”。这与 entrust assignment_roles 表中的 user_id 列属性相匹配。这让我可以继续进行迁移。

于 2014-05-13T13:24:28.437 回答
0

解决了:

在 PhpMyAdmin 中,只需进入包含外键的表并按下 INDEX 按钮。通过这种方式,在该外键上创建索引,然后在 RELATION VIEW 中可以将外键分配给正确表的正确 id。

我认为这就是解决方案。

于 2013-09-19T18:47:13.753 回答
0

根本问题出在迁移文件夹中的 EntrustSetupTables 文件中,在以下几行中:

        $table->foreign('user_id')->references('id')->on('')
            ->onUpdate('cascade')->onDelete('cascade');

只需将表用户的名称放在 .on() 之后即可解决问题。

于 2016-03-04T04:36:53.040 回答