Laravel 5.2 Entrust迁移错误,无法添加外键约束

时间:2016-03-12 10:56:55

标签: laravel laravel-5.2 entrust

我安装并配置了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

的步骤明确的指导方针

3 个答案:

答案 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 )。