交响乐 / 固定装置 "Reference already exists, use method setReference in order to override it"

Symfony / Fixtures "Reference already exists, use method setReference in order to override it"

我创建了 2 个 fixtures 文件并想要 link 它们但出现错误:对“genre_reference”的引用已经存在,请使用方法 setReference 来覆盖它。

这是我的书架:

class LivreFixtures extends Fixture implements DependentFixtureInterface
{
    public function load(ObjectManager $manager): void
    {
        $faker = Factory::create('fr_FR');
        $faker->seed(123);

        for ($i = 0; $i < 10; $i++) {
            $livre = new Livre();
            $livre->setTitre($faker->sentence($nbWords = 4, $variableNbWords = true));
            $livre->setAuteur($faker->name);
            $livre->setDescription($faker->text);
            $livre->setDateDeParution($faker->dateTime($format = 'Y-m-d'));
            $livre->setGenre($this->getReference('genre_reference'));
            $manager->persist($livre);
        }

        $manager->flush();
    }

    public function getDependencies()
    {
        return array(
            GenreFixtures::class,
        );
    }
}

还有我的流派灯具文件:

class GenreFixtures extends Fixture
{

    public function load(ObjectManager $manager): void
    {
        $faker = Factory::create('fr_FR');
        $faker->seed(123);
        
        for ($i=0; $i < 5; $i++) {
          $genre = new Genre();
          $genre->setName($faker->colorName);
          $manager->persist($genre);
          $this->addReference('genre_reference', $genre);
        }

      $manager->flush();
    }
}

我不太明白setreference的方法,具体怎么做。有帮助吗?

我认为您应该将 $i 添加到您的流派参考名称中。

$this->addReference('genre_reference_' . $i, $genre);

之后就可以使用了

$this->getReference('genre_reference_0');
//OR
$this->getReference('genre_reference_1');
//OR
$this->getReference('genre_reference_' . $i);