Исправления Symfony5 с порядком - getOrder() не работает
Когда я добавил новый файл фикстур
/**
* {@inheritdoc}
*/
public function load(ObjectManager $manager): void
{
// get user fixtures
$user = $this->getReference(LoadUserData::USER_REFERENCE);
$userSecond = $this->getReference(LoadUserData::USER_TWO_REFERENCE);
$productFirst = Product::create($user, 'title1', 'title1', 'description3', null, null);
$manager->persist($productFirst);
$productSecond = Product::create($user, 'title2', 'title2', 'description2', null, null);
$manager->persist($productSecond);
$productThird = Product::create($userSecond, 'title3', 'title3', 'description3', null, null);
$manager->persist($productThird);
$manager->flush();
}
/**
* @return array
*/
public static function getGroups(): array
{
return ['demo', 'default'];
}
Я поймал ошибку
очистка базы данных
загрузка DataFixtures\LoadUserData
В строке 154 ReferenceRepository.php:
Ссылка на "ROLE_USER" не существует
У класса LoadRoleData есть метод getOrder(), но он не работает.
public function getOrder()
{
return 1; // the order in which fixtures will be loaded
}
Раньше все делалось.
очистка базы данных
загрузка DataFixtures\LoadRoleData
загрузка DataFixtures\LoadUserData
...
ОБНОВЛЕНИЕ: класс LoadUserData имеет
/**
* {@inheritdoc}
*/
public function getDependencies()
{
return [
LoadRoleData::class
];
}
Но тоже не работает ((
Как я могу установить порядок фиксации ролей в Symfony5?
1 ответ
Вместо того, чтобы решать, в каком порядке вставлять фикстуры, вы должны позволить решить Symfony.
Для этого ваши классы приспособлений должны реализовывать DependentFixtureInterface
и переопределить метод getDependencies()
. В вашем случае это должно выглядеть так:
<?php
namespace App\DataFixtures;
class LoadUserData extends Fixture implements DependentFixtureInterface
{
public function getDependencies()
{
return [
LoadRoleData::class,
];
}
}
Теперь Symfony будет знать, что сначала нужно вставить LoadRoleData.
С помощью DependentFixtureInterface
, вам никогда не следует беспокоиться о порядке вставки, если вы правильно настроили зависимости.