Установите поле автоинкремента начала с 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();
});
}
Ответы
Ответ 1
Так и должно быть (не проверено).
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;");
Ответ 2
Большинство таблиц работают с приращениями, увеличивающимися от следующего наибольшего целого числа.
Всегда можно вставить целое число, которое больше текущего индекса автоинкремента. Затем автоматически будет введен индекс автоматического инкрементного перехода от нового значения +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();
и теперь у вас есть пустая таблица, где следующий идентификатор вставки должен быть 1000.
Обратите внимание, что если у вас есть значения для посева в таблицу со значениями id < startId
вам нужно сделать это до, чтобы выполнить эти инструкции. В противном случае база данных выдает ошибку нарушения ограничения.
Это должно работать агностик базы данных, но если есть база данных, которая не соответствует этому правилу автоинкремента, я бы хотел услышать об этом.
Ответ 3
Миграция для создания таблицы и установки ее автоматического приращения с 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 the magic
\DB::statement('ALTER TABLE table_name AUTO_INCREMENT = 1000;');
}
DB::statement()
может использоваться для выполнения любого отдельного SQL-оператора, который вам нужен.
Ответ 4
Метод Прашанта работает без проблем.
Но, как сказано ранее, не помещайте use DB;
в верхнюю часть вашего файла.
![введите описание изображения здесь]()
И вот результаты после php artisan migrate
![И вот результаты]()