2012-08-22 24 views
0

我在使用Doctrine2搜索几个实体时遇到了一个问题。Symfony2:通过几个实体查找

我的人加入到其他实体通过电子邮件对“一对多”关系的实体:

<?php 
class People 
{ 
    // ... 
    /** 
    * @ORM\OneToMany(targetEntity="Email", mappedBy="people") 
    */ 
    protected $emails; 
    // ... 
} 

class Email 
{ 
    // ... 
    /** 
    * @ORM\ManyToOne(targetEntity="People", inversedBy="emails") 
    * @ORM\JoinColumn(name="id", referencedColumnName="id") 
    */ 
    protected $people; 
} 

在我PeopleRepository,我尝试做这样的事情:

$queryBuilder = $this->_em->createQueryBuilder() 
        ->select('p') 
        ->from('MyBundle:People', 'p') 
        ->leftJoin('p.emails', 'e') 
        ->where('p.name LIKE :name') 
        ->andWhere('p.firstName LIKE :firstName') 
        ->andWhere('e.email LIKE :email') 
        ->setParameter('name', '%'.$name.'%') 
        ->setParameter('firstName', '%'.$firstName.'%') 
        ->setParameter('email', '%'.$email.'%'); 

但电子邮件条件似乎不被解释。我希望得到People实体的回复,与其链接的Email实体的电子邮件属性相对应。

我不知道我说的话是否足够清楚。

但是,如果有人了解我的问题,知道我该怎么办?

谢谢:)

回答

0

从我看到你的代码,你正在做一个左连接

->from('MyBundle:People', 'p') 
->leftJoin('p.emails', 'e') 

所以它会返回所有人类实体过滤仅

->where('p.name LIKE :name') 
->andWhere('p.firstName LIKE :firstName') 

用innerJoin替换你的leftJoin应该修复你的问题。

此致敬礼, Christophe