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

Qaz*_*azi 8 laravel laravel-5.2 entrust

我安装并配置了Laravel 5.2,它运行正常,因为User ACLzizaco/entrust在运行此命令时安装了包php artisan migrate(用于创建roles,permissions表等),导致以下错误

[Illuminate\Database\QueryException] SQLSTATE [HY000]:常规错误:1215无法添加外键约束(SQL:alter table role_useradd constraint role_user_user_id_foreign foreign key(user_id)引用``(id)on update cascade on update cascade)

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

可能是什么原因 ?我错过了什么吗?我遵循委托网站的逐步指导方针

Qaz*_*azi 17

我修复了这个问题,在委托迁移文件中,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' => App\User::class,
    ],
Run Code Online (Sandbox Code Playgroud)

php artisan entrust:migration命令运行时,它users从上面的providers数组中提取表名,如果在迁移文件中没有提到表,则关系设置为空.

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

所以,像这样在提供者数组中添加表.

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
        'table'=>'users'
    ],
Run Code Online (Sandbox Code Playgroud)

在委托迁移的运行命令之后,php artisan entrust:migration这将生成正确的迁移文件.