Генерация данных фикстур Doctrine для сущности Nested Set с помощью Алисы

Я использую hautelook/AliceBundle (который использует nelmio/alice а также fzaninotto/Faker) для создания светильников для приложения. У меня есть сущность Доктрина Group который является вложенным набором сущностей (с использованием функций дерева, предоставляемых StofDoctrineExtensionsBundle). Что я не могу понять, так это как я могу сгенерировать данные о приборах для сущности вложенного набора - убедившись, что группы генерируются в виде дерева с точными корневыми идентификаторами и родителями. Спасибо за любое руководство.

Мой текущий файл фикстуры так же прост, как;

MyBundle\Entity\Group:
  group{1..25}:
    title: <word()>

2 ответа

Решение

Я заставил его работать, вручную определяя группы для каждого уровня вложенного множества следующим образом;

MyBundle\Entity\Group:
  group_root{1..5}:
    title: <word()>

  group_level_1{1..50}:
    parent: '@group_root*'
    title: <word()>

Вы можете создать свою сущность (в моем примере это будет User) как это

class LoadUserData extends AbstractFixture implements OrderedFixtureInterface
{
    public function load(ObjectManager $manager)
    {
        $admin = new User();
        $admin->setUsername('admin');
        $admin->setFirstName('John');
        $manager->persist($admin);
        $manager->flush();
        $this->addReference('test-user', $admin);
    }
    public function getOrder()
    {
        return 1;
    }
}

а затем использовать его как зависимость:

class LoadQuestionData extends AbstractFixture implements OrderedFixtureInterface
{
    public function load(ObjectManager $manager)
    {
        $question = new Question();
        $question->setSubject('Test Question');

        /** @var User $user */
        $user = $this->getReference('test-user');
        $question->setUser($user);
        $manager->persist($question);
        $manager->flush();
    }
    public function getOrder()
    {
        return 2;
    }
}

getOrder() - контролирует, какая сущность будет сгенерирована первой и второй

Чтобы построить Binary_tree, я использую это:

App\Entity\Group:
    group1:
        title: <word()>
        # this is the tree root, do not set a parent
    group{2..100}:
        title: <word()>
        parent: '@group<(floor($current/2))>'

Вы, конечно, можете выбрать что-нибудь. в отличии от этогоx/2. Только не забудьте указать целое число (round, floor, ceil, ...).

Другие вопросы по тегам