【问题标题】:General error: 1005 Can't create table一般错误:1005 无法创建表
【发布时间】:2016-07-26 00:21:31
【问题描述】:

当我运行 php artisan migrate 时,我不断收到此错误:

[照亮\数据库\查询异常] SQLSTATE[HY000]:一般错误:1005 无法创建表binomi.#sql-3910_c0b (errno: 150 "外键约束格式不正确") (SQL:alter table users 添加约束users_activity_foreignforeign 删除级联时的键 (activity) 引用 activity (id) [PDO异常] SQLSTATE[HY000]:一般错误:1005 无法创建表binomi.#sql-3910_c0b (errno: 150 "外键约束格式不正确")

这是我的用户和活动模型的架构,它们是应用中唯一的模型。

用户迁移:

Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->string('password');
        $table->integer('activity');
        $table->rememberToken();
        $table->timestamps();
    });

  Schema::table('users', function($table){
      $table->foreign('activity')->references('id')->on('activity')->onDelete('cascade');
     }

活动迁移:

 Schema::create('activty', function (Blueprint $table) {
        $table->increments('id');
        $table->string('label');
    });

【问题讨论】:

  • 注意到“;;”在你的外键行的末尾?
  • 只是输入错误@Duikboot

标签: mysql laravel eloquent laravel-5.2


【解决方案1】:

increments() 自动分配为无符号。

所以,请确保您在下面的代码中添加无符号:

$table->integer('activity')->unsigned(); 

还要检查你是否打错字

【讨论】:

    【解决方案2】:

    unsigned() 修饰符添加到您的外键列:

    Schema::create('users', function (Blueprint $table) {
            ...
            $table->integer('activity')->unsigned();
            $table->rememberToken();
            $table->timestamps();
        });
    

    【讨论】:

      【解决方案3】:

      您的活动表有拼写错误,它在您的架构创建中显示activty。另外,我建议将其重命名为 activities,除非您只有一个。

      【讨论】:

      • 我改名了,什么都没发生
      • 你也回滚了吗?
      猜你喜欢
      • 2019-11-14
      • 2021-09-20
      • 2019-06-14
      • 1970-01-01
      • 2021-03-20
      • 2014-01-26
      • 1970-01-01
      • 2017-08-20
      • 2019-11-21
      相关资源
      最近更新 更多