如何使用 2 个外键在实体中加载固定装置?

How to load fixtures inside Entity with 2 foreign keys?

我有 3 个实体:Licence、Responsable 和 Specialist。 负责人可以管理许多许可证,而专家可以拥有许多许可证。 我已经为 Responsable 和 Specialite 创建了固定装置。 但是,我尝试了以下代码在许可证中加载夹具,但它不起作用?有帮助吗?

<?php

namespace App\DataFixtures;

use App\Entity\Licence;
use App\Entity\Responsable;
use App\Entity\Specialite;
use Doctrine\ORM\EntityManagerInterface;
use Doctrine\Bundle\FixturesBundle\Fixture;
use Doctrine\Common\Persistence\ObjectManager;

class LicenceFixtures extends Fixture
{

private $specialites;

private $responsables;

public function __construct(EntityManagerInterface $em)
{
    $this->specialites = $em->getRepository(Specialite::class);

    $this->responsables = $em->getRepository(Responsable::class);

}
public function load(ObjectManager $manager)
{



    for ($i = 0; $i < 5; $i++) {

    $specialite = $this->specialites->find($i+9);

    $resp = $this->responsables->find($i+1);

        $licence = new Licence();
        $licence->setTitre('licence '.$i);
        $licence->setCode('code'.$i);
        $licence->setEtablissement('etabli'.$i);
        $licence->setDateOuverture('2018/2019');
        $licence->setSpecialite($specialite);
        $licence->setResponsable($resp);
        $manager->persist($licence);


    }

    $manager->flush();

}
}

您应该指定 loading order 以正确的顺序解释学说,这样它会首先加载所有 Responsable 和 Specialite

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

然后,使用AbstractFixturesetReferenceaddReference方法正确share entities.

SpecialityFixtures中你可以这样做:

$speciality = new Speciality();    
$this->addReference('some.name', $speciality);
$this->em->persist($speciality);

LicenceFixtures中:

   $licence->setSpecialite($this->getReference('some.name'));