Laravel迁移 - 如何将`id`字段更改为主要字段并稍后自动递增

时间:2017-07-04 10:31:01

标签: php laravel database-migration laravel-migrations

我的桌子' sales_order_details'将id字段设为整数' int(10)'默认值为0。我需要将其更改为迁移中的主要自动增量键。

我尝试了以下方式:

 public function up()
    {
        Schema::table('sales_order_details', function (Blueprint $table){

         $table->integer('id')->default(NULL)->change();
         $table->increments('id')->change();

       });
    }

  public function down()
    {
        Schema::table('sales_order_details', function (Blueprint $table){
        $table->dropPrimary('id')->change();

       });
    }

我收到以下错误:

[照亮\数据库\ QueryException]  SQLSTATE [42000]:语法错误或访问冲突:1075表def不正确  从头;只能有一个自动列,必须将其定义为键  (SQL:ALTER TABLE sales_order_details CHANGE id id INT UNSIGNED AUTO_INCREM  ENT NOT NULL)

[学说\ DBAL \驱动\ PDOException]  SQLSTATE [42000]:语法错误或访问冲突:1075表def不正确  从头;只能有一个自动列,必须将其定义为键

[PDOException]  SQLSTATE [42000]:语法错误或访问冲突:1075表def不正确  从头;只能有一个自动列,必须将其定义为键

如何正确进行迁移?我使用的是5.4版本

1 个答案:

答案 0 :(得分:3)

您可以尝试这样

  public function up()
    {
        DB::statement("ALTER TABLE sales_order_details MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT");            
    }

  public function down()
    {
        DB::statement("ALTER TABLE sales_order_details MODIFY id INT NOT NULL");
        DB::statement("ALTER TABLE sales_order_details DROP PRIMARY KEY");
        DB::statement("ALTER TABLE sales_order_details MODIFY id INT NULL");
    }

这是您实现目标的方式之一,我希望这对您有所帮助