8

我安装并配置了 Laravel 5.2,它工作正常,因为我在运行此命令(用于创建、表等)时User ACL安装了包,但出现以下错误zizaco/entrustphp artisan migraterolespermissions

[Illuminate\Database\QueryException] SQLSTATE[HY000]:一般错误:1215 无法添加外键约束(SQL:alter table role_useradd constraint role_user_user_id_foreign 外键( )在更新级联上删除级联时user_id引用``( ))id

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

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

4

3 回答 3

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,
    ],

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

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

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

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => App\User::class,
        'table'=>'users'
    ],

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

于 2016-03-12T11:18:15.473 回答
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');
});

它完美地工作。

希望这会帮助你。

于 2016-03-12T11:02:30.117 回答
0

如果您使用 GitHub 或 StackOverflow 中给出的所有其他解决方案并且没有解决您的问题,则从数据库管理面板中删除用户表并在用户迁移文件中进行一些更改。更改bigIncrements('id'); 增量('id')或者 转到数据库管理面板,例如如果您使用 MySQL goto PHPmyadmin 面板,这里转到数据库,然后用户在这里将id的数据类型从bigint(20)更改为int(10)。

于 2020-06-17T09:09:42.253 回答