Ans*_*hra 21 php mysql migration laravel-5.1
我需要在用户表中从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();
});
}
Run Code Online (Sandbox Code Playgroud)
小智 27
它应该是这样的(未经测试).
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()
{
}
}
Run Code Online (Sandbox Code Playgroud)
更新
//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;");
Run Code Online (Sandbox Code Playgroud)
从Laravel 5.5开始进行迁移以创建表并设置其自动增量值
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;');
}
Run Code Online (Sandbox Code Playgroud)
DB::statement()
可用于执行您需要的任何单个SQL语句。
在 Laravel 8 中,您from()
只能用于 MySQL / PostgreSQL:
设置自动递增字段的起始值(MySQL / PostgreSQL)
$table->id()->from(...);
Run Code Online (Sandbox Code Playgroud)
这种startingValue()
方法也有效,但我没有在文档中的任何地方看到这一点。
$table->id()->startingValue(...);
Run Code Online (Sandbox Code Playgroud)
在 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();
}
Run Code Online (Sandbox Code Playgroud)
大多数表使用从下一个最大整数递增的增量.
可以始终插入一个整数,该整数高于当前的自动增量索引.然后,自动增量指数将自动跟随新值+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();
Run Code Online (Sandbox Code Playgroud)
现在你有一个空表,下一个插入ID应该是1000.
请注意,如果您具有要在表中使用id值<种子的值startId
,则需要在执行这些语句之前执行此操作.否则,数据库将抛出约束违规错误.
这应该与数据库无关,但如果有一个数据库不遵循这个自动增量规则,我很乐意听到它.
归档时间: |
|
查看次数: |
23801 次 |
最近记录: |