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

Ist*_*med 2 php database-migration laravel 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();

       });
    }
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

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

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

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

如何正确进行迁移?我正在使用 5.4 版

Yas*_*ala 5

你可以这样试试

  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");
    }
Run Code Online (Sandbox Code Playgroud)

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