Установите поле автоинкремента начала с 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

И вот результаты