Symfony2 - Doctrine - 加入2个表

时间:2014-06-10 12:32:49

标签: mysql symfony doctrine-orm

我在设置正确的Doctrine请求时遇到问题。 我有两张桌子(PROPRIETE和PHOTO),一张PROPRIETE可以有很多PHOTO

因此,我想制作一个SELECT,它将返回一个PROPRIETE数组,其中一个包含一个自己的PHOTO数组(不知道我是否清楚......)

这是我的Popriete课程的样子

class Propriete
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="libelle", type="string", length=255)
     */
    private $libelle;

    /**
     * @ORM\ManyToOne(targetEntity="VillaPrivee\UserBundle\Entity\User")
     * @ORM\JoinColumn(onDelete="CASCADE")
     */
    private $proprietaire;

    /**
     * @ORM\OneToMany(targetEntity="VillaPrivee\MainBundle\Entity\Photo", mappedBy="propriete")
     */
    private $photo;

然后是Photo类

class Photo
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="path", type="string", length=255)
     */
    private $path;

    /**
     * @ORM\ManyToOne(targetEntity="VillaPrivee\MainBundle\Entity\Propriete")
     * @ORM\JoinColumn(onDelete="CASCADE")
     */
    private $propriete;

最后,我的Doctrine请求(成功返回Propriete列表,但没有关于他们的照片)

public function getProprietesByCriteria($ville, $rooms) {
        $qb = $this->createQueryBuilder('p');
        $qb->where('p.commune = :ville AND p.nbChambres >= :rooms')
                ->setParameter('ville', $ville)
                ->setParameter('rooms', $rooms);
        return $qb->getQuery()->getResult();
    }

我尝试过使用leftJoin,但似乎我不知道如何使用那些东西...... 谢谢你的帮助

1 个答案:

答案 0 :(得分:0)

我认为你在代码中混合了不同的概念。使用Doctrine,您应该忘记尝试使用查询来获取多个数组。

您只需要在任何getPhoto()对象上调用propriete方法。

因此,您可以使用类似于以下的代码:

$props = $this->getProprietesByCriteria($ville, $rooms);
foreach($props as $prop)
{
  $prop->getPhoto(); // <--will return an array of the `PHOTO` related to this `PROPIETE`
}