Поколение доктрины отношений OneToMany - PullRequest
0 голосов
/ 07 декабря 2011

EDIT

Давайте возьмем следующую модель:

enter image description here

Следующие сущности создаются с помощью команды doctrine: mapping: import:

class Toto
{
    /**
     * @var integer $idtoto
     *
     * @ORM\Column(name="idtoto", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $idtoto;



    /**
     * Get idtoto
     *
     * @return integer 
     */
    public function getIdtoto()
    {
        return $this->idtoto;
    }
}

class Tata
{
    /**
     * @var integer $idtata
     *
     * @ORM\Column(name="idtata", type="integer", nullable=false)
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="IDENTITY")
     */
    private $idtata;

    /**
     * @var Toto
     *
     * @ORM\ManyToOne(targetEntity="Toto")
     * @ORM\JoinColumns({
     *   @ORM\JoinColumn(name="idtoto", referencedColumnName="idtoto")
     * })
     */
    private $idtoto;



    /**
     * Get idtata
     *
     * @return integer 
     */
    public function getIdtata()
    {
        return $this->idtata;
    }

    /**
     * Set idtoto
     *
     * @param Creatis\SaisieBundle\Entity\Toto $idtoto
     */
    public function setIdtoto(\Creatis\SaisieBundle\Entity\Toto $idtoto)
    {
        $this->idtoto = $idtoto;
    }

    /**
     * Get idtoto
     *
     * @return Creatis\SaisieBundle\Entity\Toto 
     */
    public function getIdtoto()
    {
        return $this->idtoto;
    }
}

Почему НЕ генерируется отношение OneToMany в классе Toto (пришлось вводить его вручную):

/**
 * @ORM\OneToMany(targetEntity="Tata", mappedBy="idToto")
 */
private $tatas;

Есть ли возможность поставить в командной строке?

Ответы [ 2 ]

1 голос
/ 07 декабря 2011

В leftJoin вам просто нужно использовать имя вашего атрибута отношения, как определено в классе Tata.Второй параметр определяет только ключ, который вы можете использовать в выражении.Если ваши отношения верны, доктрина выполняет соединение автоматически:

class TataRepository extends EntityRepository{
  public function getRelation(){
    $qb = $this->createQueryBuilder('tata')
      ->leftJoin('tata.idtoto', 'toto');
    return $qb->getQuery()->getResult();
  }
}

Если вы не хотите соединяться с внешним ключом, но с некоторыми другими полями, вам нужно добавить параметр слева в leftJoin, которыйсоответствие, как toto.field1 = tata.field2.

0 голосов
/ 29 июля 2012

Это ограничение из Доктрины 2. Он решает только около 70-80% необходимой картографической информации.Пожалуйста, проверьте это http://doctrine -orm.readthedocs.org / ru / 2.0.x / reference / tools.html # convert-mapping-information

...