我需要在用户表中从1000开始我的ID,我怎么能为此创建迁移。
我目前的迁移是:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id'); // how can I start this from 1000
$table->integer('qualification_id')->nullable();
$table->integer('experience_id')->nullable();
});
}
答案 0 :(得分:24)
应该是这样(未经测试)。
use Illuminate\Database\Migrations\Migration;
use Illuminate\Support\Facades\DB;
class MyTableMigration extends Migration {
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
$statement = "ALTER TABLE MY_TABLE AUTO_INCREMENT = 111111;";
DB::unprepared($statement);
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
}
}
<强>更新强>
//Your migrations here:
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id')->unsigned();
$table->integer('qualification_id')->nullable();
$table->integer('experience_id')->nullable();
});
//then set autoincrement to 1000
//after creating the table
DB::update("ALTER TABLE users AUTO_INCREMENT = 1000;");
答案 1 :(得分:5)
大多数表使用从下一个最大整数递增的增量。
总是可以插入一个高于当前自动增量索引的整数。然后,自动增量指数将自动跟随新值+1。
所以,如果你有一个刚刚铸造的表,你当前的索引是0,下一个键将是0 + 1 = 1.
我们想要的是一个从1000开始的主键,所以我们要做的是插入一个id值为999的记录,这样下一个插入就会变成1000个。
在代码中:
$startId = 1000;
DB::table('users')->insert(['id'=> $startId - 1]);
DB::table('users')->where('id',$startId - 1)->delete();
现在你有一个空表,下一个插入ID应该是1000。
请注意,如果您有值要在表格中播种的值,其值为&lt; {/ 1}}执行这些语句之前, 之前需要执行此操作。否则,数据库将抛出约束违规错误。
这应该与数据库无关,但如果有一个数据库没有遵循这个自动增量规则,我很乐意听到它。
答案 2 :(得分:2)
迁移到创建表并从Laravel 5.5开始设置其自动增量值
class ClassName(object):
_variable_one = None
_variable_two = None
def __init__(self, var1, var2):
# set variables
self._variable_one = var1
self._variable_two = var2
def _checker(self):
# check some relationship between _variable_one and _variable two
# and assert it is still true, for example:
assert self._variable_one == self._variable_two
def do_stuff(self):
# perform a method which changes _variable_one and _variable two
# check your changes do not 'break' the model
self._checker()
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->integer('qualification_id')->nullable();
$table->integer('experience_id')->nullable();
});
// Here's the magic
\DB::statement('ALTER TABLE table_name AUTO_INCREMENT = 1000;');
}
可用于执行您需要的任何单个SQL语句。
答案 3 :(得分:2)
在Laravel 8中,您只能将from()
用于MySQL / PostgreSQL:
设置自动递增字段的起始值( MySQL / PostgreSQL )
$table->id()->from(...);
此startingValue()
方法也可以使用,但是我在文档中的任何地方都没有看到这一点。
$table->id()->startingValue(...);
它在mysql的幕后使用:
public function compileAutoIncrementStartingValues(Blueprint $blueprint)
{
return collect($blueprint->autoIncrementingStartingValues())->map(function ($value, $column) use ($blueprint) {
return 'alter table '.$this->wrapTable($blueprint->getTable()).' auto_increment = '.$value;
})->all();
}
答案 4 :(得分:1)
square_matrix_multiply
我们需要添加前缀表。所以我们需要替换行
//Your migrations here:
Schema::create('users', function (Blueprint $table) {
$table->bigIncrements('id')->unsigned();
$table->integer('qualification_id')->nullable();
$table->integer('experience_id')->nullable();
});
//then set autoincrement to 1000
//after creating the table
DB::update("ALTER TABLE users AUTO_INCREMENT = 1000;");
按以下2行:
DB::update("ALTER TABLE users AUTO_INCREMENT = 1000;");
答案 5 :(得分:-4)