Исправления Symfony5 с порядком - getOrder () не работает - PullRequest
0 голосов
/ 06 августа 2020

Когда я добавил новый файл фикстур

/**
 * {@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

В ReferenceRepository. php строка 154:

Ссылка на «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 Ответ

3 голосов
/ 06 августа 2020

Вместо того, чтобы выбирать порядок вставки фикстур, вы должны позволить Symfony решать.

Для этого ваши классы фикстур должны реализовать DependentFixtureInterface и переопределить метод getDependencies(). В вашем случае это должно выглядеть так:

<?php

namespace App\DataFixtures;

class LoadUserData extends Fixture implements DependentFixtureInterface
{

    public function getDependencies()
    {
        return [
            LoadRoleData::class,
        ];
    }

}

Теперь Symfony будет знать, что ему нужно сначала вставить LoadRoleData.

Используя DependentFixtureInterface, вы никогда не должны беспокоиться о порядок вставки, если вы правильно настроили зависимости.

...