如何将自增设置为非主键?
How to set auto increment into non primary key?
如何在创建方法中设置非主键的数据库自增字段?
唯一的方法是使用原始查询吗?
DB::statement('ALTER TABLE table CHANGE field field INT(10)AUTO_INCREMENT');
没有实现。但是,我在 Laravel Forums:
找到了这个
Schema::table('table', function(Blueprint $t) {
// Add the Auto-Increment column
$t->increments("some_column");
// Remove the primary key
$t->dropPrimary("table_some_column_primary");
// Set the actual primary key
$t->primary(array("id"));
});
这没有经过测试,但应该可以。我不确定 Laravel 如何调用他们的主键,也许你必须先检查并调整 dropPrimary()
行以使其工作。
当前答案无效,自增列必须为主键。我建议在插入时使用 firstOrCreate
以获得相同级别的唯一性(前提是您仍然需要一个可用的自动递增密钥)。
我觉得在迁移时做一些变通方法不安全,所以我在模型文件中做了这个:
/**
* Setup model event hooks
*/
public static function boot()
{
parent::boot();
self::creating(function ($model) {
$model->field_here = $model->max('field_here') + 1;
});
}
如果要禁用自动递增,请在模型文件的开头添加:
public $incrementing = FALSE;
Schema::table('table_name', function(Blueprint $table) {
DB::statement('ALTER TABLE table_name ADD column_name INT NOT NULL AUTO_INCREMENT AFTER after_column_name, ADD INDEX (column_name)');
});
我使用了 pgsql
,我使用修饰符 generatedAs()
和 laravel 9
实现了
Schema::create('form_section', function (Blueprint $table) {
$table->id()->from(100);
$table->unsignedInteger('form_id');
$table->foreign('form_id')->references('id')->on('forms');
$table->unsignedInteger('section_id');
$table->foreign('section_id')->references('id')->on('sections');
$table->unsignedInteger('section_sequence')->generatedAs(); //solution
$table->timestamps($precision = 0);
});
如何在创建方法中设置非主键的数据库自增字段?
唯一的方法是使用原始查询吗?
DB::statement('ALTER TABLE table CHANGE field field INT(10)AUTO_INCREMENT');
没有实现。但是,我在 Laravel Forums:
找到了这个Schema::table('table', function(Blueprint $t) {
// Add the Auto-Increment column
$t->increments("some_column");
// Remove the primary key
$t->dropPrimary("table_some_column_primary");
// Set the actual primary key
$t->primary(array("id"));
});
这没有经过测试,但应该可以。我不确定 Laravel 如何调用他们的主键,也许你必须先检查并调整 dropPrimary()
行以使其工作。
当前答案无效,自增列必须为主键。我建议在插入时使用 firstOrCreate
以获得相同级别的唯一性(前提是您仍然需要一个可用的自动递增密钥)。
我觉得在迁移时做一些变通方法不安全,所以我在模型文件中做了这个:
/**
* Setup model event hooks
*/
public static function boot()
{
parent::boot();
self::creating(function ($model) {
$model->field_here = $model->max('field_here') + 1;
});
}
如果要禁用自动递增,请在模型文件的开头添加:
public $incrementing = FALSE;
Schema::table('table_name', function(Blueprint $table) {
DB::statement('ALTER TABLE table_name ADD column_name INT NOT NULL AUTO_INCREMENT AFTER after_column_name, ADD INDEX (column_name)');
});
我使用了 pgsql
,我使用修饰符 generatedAs()
和 laravel 9
Schema::create('form_section', function (Blueprint $table) {
$table->id()->from(100);
$table->unsignedInteger('form_id');
$table->foreign('form_id')->references('id')->on('forms');
$table->unsignedInteger('section_id');
$table->foreign('section_id')->references('id')->on('sections');
$table->unsignedInteger('section_sequence')->generatedAs(); //solution
$table->timestamps($precision = 0);
});