【问题标题】:how to change datatype from string to autoincrement in Laravel?如何在 Laravel 中将数据类型从字符串更改为自动增量?
【发布时间】:2016-06-16 09:43:16
【问题描述】:

我的迁移有以下架构:

 Schema::create('client', function(Blueprint $table)
    {
        $table->increments('id');

        $table->string('nbr', 10)->nullable()->default(null);
        $table->string('name', 100);
        $table->string('search', 100);
        $table->string('image', 100)->nullable()->default(null);
    }

我正在尝试将字符串“nbr”更改为自动增量。我尝试了几种解决方案,但没有一个有效。我尝试了以下方法:

 Schema::table('client', function(Blueprint $table)
    {
       // $table->increments('nbr')->change();
        //$table->dropPrimary('nbr');
       DB::statement('ALTER TABLE client ALTER COLUMN nbr TYPE Integer NOT NULL AUTO_INCREMENT;');
    });

注意:我正在使用 postgresql

【问题讨论】:

  • 您是否尝试过使用$table->dropColumn('nbr'); 而不是简单地使用$table->increment('nbr');
  • @Afik​​Deri 我试过了,但我得到“不允许表的多个主键”错误
  • 我认为 $table->increment('nbr') 默认是主要的,尝试使用 $table->bigIncrements('nbr') 。不确定,但值得一试。
  • 您需要 id 和 nbr 作为自动增量吗?这对我来说似乎是多余的,我想不出在一个表中有两个自动增量的任何用途。如果您只想将 nbr 作为自动增量,则将其设置为主键并使用唯一键作为 id。 Laravel 的模式支持多个 RDBMS,大多数 RDBMS 不允许有两个自增列。

标签: postgresql laravel-5 database-schema


【解决方案1】:

创建一个新的迁移文件并添加以下代码。然后执行php artisan migrate

public function up()
{
    Schema::table('clients', function($table){
        $table->dropPrimary('clients_id_primary');
        $table->dropColumn('id');
        $table->dropColumn('nbr');
        $table->increments('nbr');
        $table->dropPrimary('clients_nbr_primary');
        $table->increments('id');
    });
}


public function down()
{
    Schema::table('clients', function($table){
        $table->dropColumn('nbr');
        $table->dropPrimary('clients_nbr_primary');
        $table->increments('id');
        $table->string('nbr', 10)->nullable()->default(null);
    });
}

【讨论】:

  • 这不会删除“id”列吗?我需要 id 和 nbr 列,其中 id 是主键,而 nbr 只是增量。
  • 我以为你只想要“nbr”列。我更新了我的答案,试试那个
  • 我得到“不允许表的多个主键”错误
  • 也可以试试$table->dropPrimary('clients_id_primary');。 (更新答案)
猜你喜欢
  • 1970-01-01
  • 2022-01-16
  • 2020-11-10
  • 2018-09-26
  • 2021-12-28
  • 1970-01-01
  • 2020-10-27
  • 2022-01-09
  • 2018-03-21
相关资源
最近更新 更多