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')尝试我得到的“不允许使用表的多个主键”错误代码>也是。(最新答覆)