0

Doctrine2でいくつかのエンティティを検索しているときに、問題が発生しました。

私はエンティティを持っています人々は「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.'%');

しかし、電子メールの状態は解釈されていないようです。リンク先のEメールエンティティからのEメール属性に対応するPeopleエンティティで応答を取得したいと思います。

私の言うことが十分に明確かどうかはわかりません。

しかし、誰かが私の問題を理解した場合、私がどのようにできるか知っていますか?

ありがとうございました :)

4

1 に答える 1

0

私があなたのコードを見ると、あなたは左結合をしている

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

そのため、フィルタリングされているすべての人のエンティティが返されます

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

leftJoinをinnerJoinに置き換えると、問題が解決するはずです。

よろしく、クリストフ

于 2012-08-22T19:44:58.917 に答える