Symfony / Fixtures “引用已经存在,使用方法 setReference 来覆盖它”
Posted
技术标签:
【中文标题】Symfony / Fixtures “引用已经存在,使用方法 setReference 来覆盖它”【英文标题】:Symfony / Fixtures "Reference already exists, use method setReference in order to override it" 【发布时间】:2021-12-23 08:25:32 【问题描述】:我创建了 2 个夹具文件并想链接它们,但出现错误:对“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方法,怎么做。有什么帮助吗?
【问题讨论】:
你清除缓存测试了吗? 我不能有一个新的错误出现“无效的“af 2”语言环境。试图重命名以手动清除缓存但没有任何效果,不知道为什么突然出现这个错误。 我认为您应该首先修复此错误,因为您的代码应该可以工作 是的,谢谢你,我试图解决这个问题,但无法真正找到解决方案 【参考方案1】:我认为您应该将 $i 添加到您的流派参考名称中。
$this->addReference('genre_reference_' . $i, $genre);
之后就可以使用了
$this->getReference('genre_reference_0');
//OR
$this->getReference('genre_reference_1');
//OR
$this->getReference('genre_reference_' . $i);
【讨论】:
以上是关于Symfony / Fixtures “引用已经存在,使用方法 setReference 来覆盖它”的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2 在 Doctrine Fixtures Load 中执行 SQL 文件