2016-07-04 13 views
0

Ich mache Integrationstests und kann keine ID direkt auf eine Entität setzen. Was ich brauche ist, sagen Sie Doctrine, ID auf 1 zurückzusetzen.Zurücksetzen Doktrin 2 ID

Wenn ich flush aufrufen bekomme ich IDs 20, 21, dann 22,23.

Ich habe versucht, Tabelle löschen, Identität oder diese thread zurückgesetzt, aber nichts hilft.

Mein Code:

public function testFindingAllOrderedByDefault() 
{ 
    /** @var $bundles Bundle[] */ 
    $bundles = $this->repository->findAll(); 
    $this->assertCount(2, $bundles); 
    $this->assertSame(1, $bundles[0]->getId()); 
    $this->assertSame(2, $bundles[1]->getId()); 
} 

protected function prepareDatabase(EntityManager $entityManager, Connection $connection) 
{ 
    $connection->executeQuery('TRUNCATE bundle CASCADE'); 
    $entityManager->persist(
     (new Bundle()) 
      ->setPrice(1200) 
      ->setPriceVat(5000) 
      ->setDiscount(1000) 
      ->setCurrency('czk') 
    ); 
    $entityManager->persist(
     (new Bundle()) 
      ->setPrice(1300) 
      ->setPriceVat(4000) 
      ->setDiscount(500) 
      ->setCurrency('eur') 
    ); 
    $entityManager->flush(); 
} 

Vielen Dank im Voraus.

Antwort

1

Das Problem ist nicht Lehre hier bezogen. MySQL speichert den nächsten verfügbaren Primärschlüssel in den Tabellenmetadaten.

ALTER TABLE your_table AUTO_INCREMENT = 1; 

Oder in einer Lehre Migration: Sie können durch Ausführen einer ALTER TABLE Abfrage "Reset" oder den Wert verändern

public function up(Schema $schema) 
{ 
    $this->connection->exec('ALTER TABLE your_table AUTO_INCREMENT = 1'); 
} 

Wenn Sie nicht die Lehre Migration Bündel verwenden, können Sie schreiben kann eine einmalige Skript und mit Hilfe des Entity-Manager: ich Postgres

$em->getConnection()->exec('ALTER TABLE your_tbl AUTO_INCREMENT = 1'); 
+0

Danke, bin mit, also muss ich verwenden bund $ connection-> executeQuery ('ALTER SEQUENCE le_id_seq RESTART MIT 1 '); –