2016-11-20 5 views
1

Gibt es eine Möglichkeit, die automatische Inkrementierung vor dem Seeding einer Tabelle auf 1 zurückzusetzen?Laravel: Automatisches Inkrementieren vor dem erneuten Seeding einer Tabelle zurücksetzen

leeren ich den Tisch, bevor es Impfen und wenn ich nicht migrate:refresh tun hat, bevor es dann Impfen es weiterhin die Autoinkrement der ID von der letzten Position, zum Beispiel 4.

Tabelle Samen:

public function run() 
{ 
    DB::table('products')->delete(); 
    // Product table seeder 
    $product = new \App\Product([ 
     'category_id' => 1, 
     'image_path' => '/images/products/1/000001.jpg', 
     'title' => 'test', 
    ]); 
    $product->save(); 
} 

Erstellen der Tabelle:

Schema::create('products', function (Blueprint $table) { 
    $table->increments('id'); 
    $table->integer('category_id')->unsigned(); 
    $table->foreign('category_id')->references('id')->on('categories'); 
    $table->string('image_path'); 
    $table->string('title'); 
    $table->timestamps(); 
}); 

Antwort

5

starten:

DB::statement('SET FOREIGN_KEY_CHECKS=0'); 

DB::table('products')->truncate(); 

Statt

DB::table('products')->delete(); 
+3

Hinzufügen von 'DB :: Anweisung (SET FOREIGN_KEY_CHECKS = 0; ');' am Anfang und das Hinzufügen 'DB :: statement ('SET FOREIGN_KEY_CHECKS = 1;');' am Ende des Seeds, und ändern 'DB :: table ('products') -> delete();' in 'DB :: table (' Produkte ') -> truncate(); 'tat es. – Rudolph

+0

Ihre Frage fragt nur nach dem erneuten Seeding der Tabelle, also nimmt @Rimon Khan an, dass dies nur für PRIMARY KEY gilt. Insgesamt hat die Antwort die Antwort gewählt, da dies die Frage erfüllt. – Ronald

1

Wenn Sie make:migration oder make:model -m Befehle verwenden eine Migration zu erstellen, Laravel schafft down() Methode mit dropIfExists() Klausel:

public function down() 
{ 
    Schema::dropIfExists('products'); 
} 

Also, wenn Sie laufen migrate:refresh Befehl, Laravel wird den Tisch fallen lassen und wird ihn für dich zurückgeben.

Außerdem haben Sie Fremdschlüssel in der Tabelle, so müssen Sie dropForeign() zuerst verwenden:

public function down() 
{ 
    Schema::table('products', function (Blueprint $table) { 
     $table->dropForeign('products_category_id_foreign'); 
    }); 

    Schema::dropIfExists('products'); 
} 
+1

Die "Laravel" Art und Weise dies zu tun, auf jeden Fall. – Ohgodwhy

Verwandte Themen