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