web-dev-qa-db-fra.com

Définition du début de champ 1000 à incrémentation automatique dans la migration laravel 5.1

Je dois démarrer mes identifiants à partir de 1 000 dans la table utilisateur. Comment créer une migration pour cela.

Ma migration actuelle est:

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();
    });
}
16
Anshul Mishra

Ce devrait être comme ça (non testé).

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()
    {
    }
}

Mettre à jour

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

La plupart des tables fonctionnent avec des incréments incrémentés à partir du plus grand entier.

On peut toujours insérer un entier supérieur à l'index auto-incrémenté actuel. L'indice d'auto-incrémentation suivra alors automatiquement de cette nouvelle valeur +1 en haut.

Ainsi, si vous avez une table fraîchement frappée, votre index actuel est 0, la clé suivante sera 0 + 1 = 1.

Ce que nous voulons, c'est une clé primaire qui commence à 1 000. Nous insérons donc un enregistrement dont la valeur id est 999. La prochaine insertion deviendra 1 000.

Dans du code:

 $startId = 1000;

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

et maintenant vous avez une table vide où la prochaine insertion ID devrait être 1000.

Veuillez noter que si vous avez des valeurs à insérer dans la table avec des valeurs id <startId, vous devez le faire avant vous exécutez ces instructions. Sinon, la base de données générera une erreur de violation de contrainte.

Cela devrait fonctionner indépendamment des bases de données, mais si une base de données ne respecte pas cette règle d'auto-incrémentation, j'aimerais bien en entendre parler.

5
Tschallacka

Migration pour créer une table et définir sa valeur d'incrémentation automatique à partir de 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() peut être utilisé pour exécuter toute instruction SQL dont vous avez besoin.

1