如何使用 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,
);
}
然后,使用AbstractFixture
setReference
和addReference
方法正确share entities.
在SpecialityFixtures
中你可以这样做:
$speciality = new Speciality();
$this->addReference('some.name', $speciality);
$this->em->persist($speciality);
在LicenceFixtures
中:
$licence->setSpecialite($this->getReference('some.name'));
我有 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,
);
}
然后,使用AbstractFixture
setReference
和addReference
方法正确share entities.
在SpecialityFixtures
中你可以这样做:
$speciality = new Speciality();
$this->addReference('some.name', $speciality);
$this->em->persist($speciality);
在LicenceFixtures
中:
$licence->setSpecialite($this->getReference('some.name'));