web-dev-qa-db-ja.com

移行で1000から開始する自動インクリメントフィールドを設定=​​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();
    });
}
21
Anshul Mishra

このようになります(テストされていません)。

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;");
26
user5456506

ほとんどのテーブルは、次に大きい整数から増加する増分で動作します。

現在の自動増分インデックスよりも大きい整数をいつでも挿入できます。自動インクリメントインデックスは、その新しい値から+1を自動的に追跡します。

したがって、新しく作成されたテーブルがある場合、現在のインデックスは0になり、次のキーは0 + 1 = 1になります。

必要なのは1000で始まる主キーなので、999のid値を持つレコードを挿入するので、次の挿入は1000になります。

コード内:

 $startId = 1000;

 DB::table('users')->insert(['id'=> $startId - 1]);
 DB::table('users')->where('id',$startId - 1)->delete();

これで、次の挿入IDが1000になる空のテーブルができました。

Id値<startIdでテーブルにシードする値がある場合、それを行う必要があることに注意してくださいbeforeこれらのステートメントを実行します。そうしないと、データベースは制約違反エラーをスローします。

これはデータベースにとらわれずに機能しますが、この自動インクリメントルールに従わないデータベースがある場合、それについて聞きたいと思います。

5
Tschallacka

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ステートメントを実行できます。

4