У меня есть набор светильников (здесь упрощение):
My\Entity\User:
user_{1..10}:
name: <firstName()>
My\Entity\Item:
item_{1..10}:
user: '@user_$current'
data: <numberBetween(111111111, 999999999)>
Я хочу получить Item с идентификатором 4 внутри моего функционального теста phpunit.
Я не могу быть уверен, что ID автоинкремента начинается с 1. Это не 1 после TRUNCATE. Итак, это неправильный:
$item4 = $this->em->getRepository(Item::class)->find(4);
Как я могу получить ссылку на item_4?
Можете ли вы добавить часть вашего кода, которая загружает фикстуры? Загрузчик, загружающий файл фикстуры, вернет массив со всеми сущностями. Из этого массива вы можете получить сущность вместо того, чтобы извлекать ее через диспетчер сущностей. Если вы хотите убедиться, что вы можете найти его, вы можете использовать идентификатор этого объекта, чтобы перейти к find()




Вы можете получить объекты, сгенерированные из файла фикстур, непосредственно из загрузчика:
$loader = new Nelmio\Alice\Loader\NativeLoader();
$objectSet = $loader->loadFile(__DIR__.'/fixtures.yml');
$objectSet должен содержать все ваши объекты по их псевдонимам, чтобы вы могли получить конкретный элемент и напрямую работать с ним или снова получить его, используя свой репозиторий.
$fixtureItem4 = $objectSet['item_4'];
$persistedItem4 = $this->em->getRepository(Item::class)->find($fixtureItem4->getId());
Я не знаю элегантного решения, так что насчет переназначения клавиш?