2016-07-04 12 views
0

私は統合テストを行っており、IDをエンティティに直接設定することはできません。私が必要とするのは、どういうわけかDoctrineにIDを1にリセットするように指示します。Doctrine 2をリセットするID

私はflushを呼び出すと、IDが20,21、そして22,23になります。

私はテーブルを削除しようとしましたが、IDをリセットするか、これはthreadですが、何も役に立ちません。

マイコード:事前に

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

感謝。

答えて

1

問題はここでは教義に関連していません。 MySQLは、テーブルのメタデータに格納されている次の使用可能な主キーを保持します。あなたはを「リセット」またはALTER TABLEクエリを実行して値を変更することができます

ALTER TABLE your_table AUTO_INCREMENT = 1; 

あるいは、教義の移行中:

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

あなたは、教義の移行バンドルを使用していない場合一回限りのスクリプトを記述して、エンティティ・マネージャを使用してすることができます

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

おかげで、私はPostgresのを使用していますので、私は$ connection-を使用する必要があります>のexecuteQuery( 'ALTER SEQUENCEの外灘le_id_seq RESTART WITH 1 '); –

関連する問題