2015-12-10 13 views

risposta

12

Dovrebbe essere come questa (non testato).

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

Aggiornamento

//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;"); 
+0

Ho incollato quella riga sotto la mia migrazione, ha generato un errore: 'L'istruzione use con nome non composto 'DB' non ha effetto' –

+1

Penso che stai usando DB in alto (usa DB;) che è perché stai ricevendo questo errore, basta rimuovere questo, e ho aggiornato la mia risposta dare un'occhiata. –

+0

Questo non funziona per tutti i database. Esempio, non funziona per sqlite. – abkrim

-3

il metodo di Prashant funziona senza problemi. Ma come è stato detto prima, non inserire use DB; nella parte superiore del file.

enter image description here

E qui sono i risultati dopo php artisan migrate

And here are the results

+1

Grazie per la risposta, ma penso che tu abbia pubblicato la stessa risposta di Prashant. –

+0

Stesso. Non funziona per tutti i tipi di database. – abkrim

+0

Per favore specifica la tua risposta e la tua presunzione. –

6

La maggior parte dei tavoli di lavoro con incrementi di incrementare dal prossimo grande numero intero.

Si può sempre inserire un numero intero, che è superiore all'indice di autoincrementazione corrente. L'indice autoincrementante seguirà automaticamente da quel nuovo valore +1 in su.

Quindi, se si dispone di una tabella di fresco conio l'indice corrente è 0, il tasto successivo sarà 0 + 1 = 1.

Quello che vogliamo è una chiave primaria che inizia a 1000, quindi quello che facciamo è inserire un record con un valore id di 999, in modo che il prossimo inserto diventerà 1000.

in codice:

$startId = 1000; 

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

e ora si dispone di un tavolo vuoto dove il prossimo inserto id dovrebbe essere 1000.

Si noti che se si dispone di valori per l'inizializzazione nella tabella con i valori id < startId è necessario eseguire tale prima di si eseguono queste istruzioni. Altrimenti il ​​database genererà un errore di violazione del vincolo.

Questo dovrebbe funzionare agnostico del database, ma se c'è un database che non segue questa regola di autoincremento mi piacerebbe sentirne parlare.

+1

è anche un buon trucco :) –

+0

Yea, ha deciso di pubblicare una risposta agnostica del database che dovrebbe essere utilizzabile su qualsiasi motore di database, invece degli hack specifici del database. – Tschallacka

0

migrazione per creare tavolo e impostare il suo valore di incremento automatico come di 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() può essere utilizzato per eseguire qualsiasi istruzione SQL è necessario.