2014-06-10 51 views
0

我遇到问题,正确设置了我的Doctrine请求。我有两个表(PROPRIETE和PHOTO),一个PROPRIETE可以有很多PHOTOSymfony2 - 学说 - 加入2个表格

因此,我想做一个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; 

然后是图片类

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; 

最后,我的原则要求(即成功返回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试过,但似乎我不知道如何使用东西... 谢谢你们的帮助

+2

如果调用方法'getPhoto()'任何返回'PROPRIETE'值的,你明白了'PHOTO'阵列? –

回答

0

我在你的代码中混合了不同的概念。使用Doctrine你应该忘记试图通过查询获取多个数组。

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

所以,你可以使用类似代码:

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