Как загрузить светильники внутри Entity с двумя внешними ключами? - PullRequest
0 голосов
/ 26 декабря 2018

У меня есть 3 объекта: лицензия, ответственный и специальный.Ответственный может управлять многими лицензиями, а 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();

}
}

1 Ответ

0 голосов
/ 26 декабря 2018

Вы должны указать порядок загрузки , чтобы объяснить доктрине правильный порядок, поэтому сначала будут загружены все Ответственные и Особые

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

Затем используйте AbstractFixture setReference и addReference методов для правильного совместного использования сущностей .

В SpecialityFixtures вы можете сделать так:

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

И в LicenceFixtures:

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