首页 文章

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

提问于
浏览
2

我的表'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();

       });
    }

我收到以下错误:

[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版

1 回答

  • 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");
        }
    

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

相关问题