0

我在使用 Doctrine2 搜索多个实体时遇到问题。

我有一个实体 People 通过“OneToMany”关系加入另一个实体电子邮件:

<?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 实体的响应,对应于它链接到的电子邮件实体的电子邮件属性。

不知道我说的够不够清楚。

但如果有人理解我的问题,知道我该怎么做吗?

谢谢 :)

4

1 回答 1

0

根据我对您的代码的了解,您正在执行左连接

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

因此它将仅返回所有人员实体过滤

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

用 innerJoin 替换您的 leftJoin 应该可以解决您的问题。

最好的问候,克里斯托夫

于 2012-08-22T19:44:58.917 回答