带有订单的 Symfony5 固定装置 - getOrder() 不起作用

ult*_*tum 1 fixtures symfony symfony5

当我添加新的灯具文件时

/**
 * {@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'];
}
Run Code Online (Sandbox Code Playgroud)

我发现错误

清除数据库

加载 DataFixtures\LoadUserData

在 ReferenceRepository.php 第 154 行:

对“ROLE_USER”的引用不存在

类 LoadRoleData 有方法 getOrder(),但它不起作用。

public function getOrder()
{
    return 1; // the order in which fixtures will be loaded
}
Run Code Online (Sandbox Code Playgroud)

早先都搞定了。

清除数据库

加载 DataFixtures\LoadRoleData

加载 DataFixtures\LoadUserData

...

更新:类 LoadUserData 有

    /**
     * {@inheritdoc}
     */
     public function getDependencies()
     {
        return [
            LoadRoleData::class
        ];
     }
Run Code Online (Sandbox Code Playgroud)

但它也不起作用((

如何在 Symfony5 中设置角色夹具的顺序?

小智 7

与其决定插入设备的顺序,不如让 Symfony 来决定。

为此,您的夹具类应该实现DependentFixtureInterface并覆盖 method getDependencies()。在你的情况下,它应该是这样的:

<?php

namespace App\DataFixtures;

class LoadUserData extends Fixture implements DependentFixtureInterface
{

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

}
Run Code Online (Sandbox Code Playgroud)

现在,Symfony 将知道它需要先插入 LoadRoleData。

使用DependentFixtureInterface,如果您已正确设置依赖项,则不必担心插入的顺序。