Установите начальную форму поля автоматического приращения 1000 в миграции laravel 5.1
Мне нужно запустить мои идентификаторы с 1000 в таблице пользователей, как я могу создать миграцию для этого.
Моя текущая миграция:
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();
});
}
4 answers
Это должно быть так (не проверено).
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
DB::update("ALTER TABLE users AUTO_INCREMENT = 1000;");
Большинство таблиц работают с приращениями, увеличивающимися от следующего по величине целого числа.
Всегда можно вставить целое число, которое больше текущего индекса автоинкрементирования. Затем индекс автоинкрементирования будет автоматически следовать от этого нового значения +1 вверх.
Итак, если у вас только что отчеканенная таблица, ваш текущий индекс равен 0, следующим ключом будет 0 + 1 = 1.
Нам нужен первичный ключ, который начинается с 1000, поэтому мы вставляем запись со значением идентификатора 999, так что следующая вставка станет 1000.
В коде:
$startId = 1000;
DB::table('users')->insert(['id'=> $startId - 1]);
DB::table('users')->where('id',$startId - 1)->delete();
И теперь у вас есть пустая таблица, в которой следующий идентификатор вставки должен быть 1000.
Пожалуйста, обратите внимание, что если у вас есть значения для заполнения таблицы со значениями идентификаторов startId, вам нужно сделать это перед выполнением этих инструкций. В противном случае база данных выдаст ошибку о нарушении ограничений.
Это должно работать независимо от базы данных, но если есть база данных, которая не следует этому правилу автоматического создания я бы с удовольствием послушал об этом.
Миграция для создания таблицы и установки ее значения автоматического увеличения с 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;');
}
DB::statement()
может использоваться для выполнения любого отдельного оператора SQL, который вам нужен.