Сброс Доктрина 2 ID

Я провожу интеграционное тестирование и не могу напрямую установить идентификатор для объекта. Что мне нужно, так это как-то сказать Doctrine, чтобы сбросить ID на 1.

Когда я вызываю флеш, я получаю идентификаторы 20, 21, а затем 22,23.

Я пытался удалить таблицу, сбросить личность или это нить но ничего не помогает.

Мой код:

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

Заранее спасибо.

0

Решение

Проблема не в доктрине, связанной здесь. 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');
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]