Postgresql 如何在Laravel中将数据类型从字符串更改为自动增量?

Postgresql 如何在Laravel中将数据类型从字符串更改为自动增量?,postgresql,laravel-5,database-schema,Postgresql,Laravel 5,Database Schema,我的迁移有以下模式: Schema::create('client', function(Blueprint $table) { $table->increments('id'); $table->string('nbr', 10)->nullable()->default(null); $table->string('name', 100); $table->string('sear

我的迁移有以下模式:

 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创建一个新的迁移文件并添加以下代码。然后执行
php artisan迁移

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

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

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

您是否尝试过执行
$table->dropColumn('nbr')而不是简单地做
$table->increment('nbr')
@AfikDeri我试过了,但是我得到了“表的多个主键是不允许的”错误。我认为默认情况下,
$table->increment('nbr')
是主键,请尝试使用
$table->bigIncrements('nbr')
。不确定,但值得一试。您是否需要id和nbr作为自动增量?这对我来说似乎是多余的,我想不出在一个表中有两个自动增量的任何用途。如果您只想将nbr设置为自动增量,则将其设置为主键,并仅使用id的唯一键。Laravel的模式用于支持多个RDBMS,大多数RDBMS不允许有两个自动增量列。您是否尝试执行
$table->dropColumn('nbr')而不是简单地做
$table->increment('nbr')
@AfikDeri我试过了,但是我得到了“表的多个主键是不允许的”错误。我认为默认情况下,
$table->increment('nbr')
是主键,请尝试使用
$table->bigIncrements('nbr')
。不确定,但值得一试。您是否需要id和nbr作为自动增量?这对我来说似乎是多余的,我想不出在一个表中有两个自动增量的任何用途。如果您只想将nbr设置为自动递增,那么将其设置为主键,并仅使用id的唯一键。Laravel的模式支持多个RDBMS,大多数RDBMS不允许有两个自动递增列。这不就是删除“id”列吗?我需要id和nbr列,其中id是主键,nbr只是增量。我想你们只需要“nbr”列。我更新了我的答案,试着用
$table->dropPrimary('clients_id_primary')尝试我得到的“不允许使用表的多个主键”错误也是。(更新的答案)这不是删除了“id”列吗?我需要id和nbr列,其中id是主键,nbr只是增量。我想你们只需要“nbr”列。我更新了我的答案,试着用
$table->dropPrimary('clients_id_primary')尝试我得到的“不允许使用表的多个主键”错误也是。(最新答覆)