【问题标题】:Laravel 5.2 Entrust migrate error, cannot add foreign key constraintsLaravel 5.2 Entrust migrate 错误,无法添加外键约束
【发布时间】:2016-06-27 16:11:14
【问题描述】:

我安装并配置了 Laravel 5.2,它工作正常,对于 User ACL 我安装了 zizaco/entrust 包,同时运行此命令 php artisan migrate(用于创建 rolespermissions 表等)出现以下错误

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

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

可能是什么原因?我错过了什么吗?我遵循了 entrust site 的逐步指南

【问题讨论】:

    标签: laravel laravel-5.2 entrust


    【解决方案1】:

    我修复了这个问题,在委托迁移文件中,缺少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 文件中,providers 数组中没有提到'table'=>'users' 密钥/对,见下文(这是默认值,表示安装新的 laravel 时)

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

    php artisan entrust:migration 命令运行时,它从上面的 providers 数组中拉取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之后,这将生成正确的迁移文件。

    【讨论】:

      【解决方案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');
      });
      

      效果很好。

      希望这会对你有所帮助。

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2016-11-11
          • 2017-03-03
          • 2020-01-20
          • 2020-09-12
          • 2019-10-26
          • 1970-01-01
          • 2018-04-05
          • 2020-09-14
          相关资源
          最近更新 更多