Laravel 5.2 Entrust migrate 错误,无法添加外键约束
Laravel 5.2 Entrust migrate error, cannot add foreign key constraints
我安装并配置了 Laravel 5.2,它工作正常,对于 User ACL
我安装了 zizaco/entrust
包,而 运行 这个命令 php artisan migrate
(对于创建 roles
、permissions
table 等)出现以下错误
[Illuminate\Database\QueryException] SQLSTATE[HY000]: General
error: 1215 Cannot add foreign key constraint (SQL: alter table
role_user
add constraint role_user_user_id_foreign foreign key
(user_id
) references `` (id
) on delete cascade on update
cascade)
[PDOException] SQLSTATE[HY000]: General error: 1215 Cannot add
foreign key constraint
可能是什么原因?我错过了什么吗?我遵循了 entrust site
的明智步骤指南
当我尝试在同一个迁移(同一个 Schema::create
块)中添加外键时,有时会遇到同样的错误。如果我在创建新列的地方创建迁移:
Schema::create(...
...
$table->integer('categories_id')->unsigned();
...
});
然后在同一个文件中,我将此列设置为外键:
Schema::table('sub_categories', function (Blueprint $table) {
$table->foreign('categories_id')->references('id')->on('main_categories');
});
完美运行。
希望对您有所帮助。
我解决了这个问题,在委托迁移文件中,缺少 users
table 名称。见下行
$table->foreign('user_id')->references('id')->on(' ')->onUpdate('cascade')->onDelete('cascade');
所以我改成了这样,
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
我添加了 users
table 名称,问题已解决。
原因,为什么我遇到这个问题?
在 config/auth.php
文件中,providers 数组中没有提到 'table'=>'users'
key/pair,见下文(这是默认设置,意味着安装新的 laravel 时)
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
while php artisan entrust:migration
命令 运行s,它从上面的提供者数组中提取 users
table 名称,如果没有提到 table 那么在迁移文件,关系设置为空。
$table->foreign('user_id')->references('id')->on('')->onUpdate('cascade')->onDelete('cascade');
所以,像这样在提供程序数组中添加 table。
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
'table'=>'users'
],
之后 运行 委托迁移命令 php artisan entrust:migration
这将生成正确的迁移文件。
如果您使用了 GitHub 或 Whosebug 中给出的所有其他解决方案而没有解决您的问题,那么请从数据库管理面板中删除用户 table 并在 用户中进行一些更改迁移 文件。将 bigIncrements('id'); 更改为 Increment('id')。
或
转到数据库管理面板,如果你使用 MySQL 转到 PHPmyadmin 面板,转到数据库,然后这里的用户将 id 的数据类型从 bigint(20) 到 int(10).
我安装并配置了 Laravel 5.2,它工作正常,对于 User ACL
我安装了 zizaco/entrust
包,而 运行 这个命令 php artisan migrate
(对于创建 roles
、permissions
table 等)出现以下错误
[Illuminate\Database\QueryException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table
role_user
add constraint role_user_user_id_foreign foreign key (user_id
) references `` (id
) on delete cascade on update cascade)[PDOException] SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint
可能是什么原因?我错过了什么吗?我遵循了 entrust site
的明智步骤指南当我尝试在同一个迁移(同一个 Schema::create
块)中添加外键时,有时会遇到同样的错误。如果我在创建新列的地方创建迁移:
Schema::create(...
...
$table->integer('categories_id')->unsigned();
...
});
然后在同一个文件中,我将此列设置为外键:
Schema::table('sub_categories', function (Blueprint $table) {
$table->foreign('categories_id')->references('id')->on('main_categories');
});
完美运行。
希望对您有所帮助。
我解决了这个问题,在委托迁移文件中,缺少 users
table 名称。见下行
$table->foreign('user_id')->references('id')->on(' ')->onUpdate('cascade')->onDelete('cascade');
所以我改成了这样,
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
我添加了 users
table 名称,问题已解决。
原因,为什么我遇到这个问题?
在 config/auth.php
文件中,providers 数组中没有提到 'table'=>'users'
key/pair,见下文(这是默认设置,意味着安装新的 laravel 时)
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
],
while php artisan entrust:migration
命令 运行s,它从上面的提供者数组中提取 users
table 名称,如果没有提到 table 那么在迁移文件,关系设置为空。
$table->foreign('user_id')->references('id')->on('')->onUpdate('cascade')->onDelete('cascade');
所以,像这样在提供程序数组中添加 table。
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App\User::class,
'table'=>'users'
],
之后 运行 委托迁移命令 php artisan entrust:migration
这将生成正确的迁移文件。
如果您使用了 GitHub 或 Whosebug 中给出的所有其他解决方案而没有解决您的问题,那么请从数据库管理面板中删除用户 table 并在 用户中进行一些更改迁移 文件。将 bigIncrements('id'); 更改为 Increment('id')。 或 转到数据库管理面板,如果你使用 MySQL 转到 PHPmyadmin 面板,转到数据库,然后这里的用户将 id 的数据类型从 bigint(20) 到 int(10).