我安装并配置了Laravel 5.2,它工作正常,User ACL
我在运行此命令时安装了zizaco/entrust
包php artisan migrate
(用于创建roles
,permissions
表等)得到以下错误
[Illuminate\Database\QueryException] SQLSTATE[HY000]: General 错误: 1215 无法添加外键约束 (SQL: 更改表
role_user
添加约束role_user_user_id_foreign外键 (user_id
) 引用 '' (id
) 在更新时删除级联 级联)[PDOException] SQLSTATE[HY000]:一般错误:1215 无法添加 外键约束
可能是什么原因? 我错过了什么吗?我遵循了委托站点的分步指南
我修复了这个问题,在委托迁移文件中,缺少users
表名。 见以下行
$table->foreign('user_id')->references('id')->on(' ')->onUpdate('cascade')->onDelete('cascade');
所以我改成这个,
$table->foreign('user_id')->references('id')->on('users')->onUpdate('cascade')->onDelete('cascade');
我添加了users
表名称,问题已解决。
原因,为什么我遇到这个问题?
config/auth.php
文件中,提供程序数组中没有提到'table'=>'users'
键/对,请参见下文(这是默认值,表示安装新Laravel时)
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => AppUser::class,
],
当php artisan entrust:migration
命令运行时,它会从上面的提供程序数组中提取users
表名,如果没有提到表,则在迁移文件中,关系集像这样为空。
$table->foreign('user_id')->references('id')->on('')->onUpdate('cascade')->onDelete('cascade');
因此,像这样在提供程序数组中添加表。
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => AppUser::class,
'table'=>'users'
],
之后运行命令进行委托迁移php artisan entrust:migration
这将生成正确的迁移文件。
当我尝试在同一迁移中添加外键(相同的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');
});
它工作得很好。
希望这对您有所帮助。
如果您使用 GitHub 或 StackOverflow 中给出的所有其他解决方案并且没有解决您的问题,请从数据库管理面板中删除用户表并在用户迁移文件中进行一些更改。将 bigIncrements('id'); 更改为 Increment('id')。或转到数据库管理面板,就像您使用 MySQL 转到 PHPmyadmin 面板一样 转到数据库,然后这里的用户将 id 的数据类型从 bigint(20) 更改为 int(10)。