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 来覆盖它”的主要内容,如果未能解决你的问题,请参考以下文章

text faker fixtures symfony

Symfony2 在 Doctrine Fixtures Load 中执行 SQL 文件

Symfony 3.3 Doctrine Fixtures 加载跳过 SQL 视图

Symfony 学说数据加载分段错误

Symfony 3.4.0 找不到要加载的任何夹具服务

Symfony - 删除并重新加载每个测试的所有数据库记录