1

私には2つのエンティティがあります:ImageTags、多対多の関係があります。

Imagecode、、、および多対多の関係を実装するいくつかのフィールドがありますdescriptionauthortags

Tagフィールドは2つだけです:nameimages

私は非常に一般的な検索フォームを作成しています。入力フィールドだけで任意のテキストを入力できImage、そのテキストが、、フィールドcodedescriptionまたはauthor任意のタグnameフィールドに含まれているものが返されます。

非関係フィールドの場合、それは簡単です。私は自分のコントローラーにあります(query検索に使用されるのは単なるde GETパラメーターです):

$em = $this->getDoctrine()->getManager();

$qb = $em->getRepository('MyBundle:Image')->createQueryBuilder('i');

$qb
->where(
      $qb->expr()->like('i.code', $qb->expr()->literal('%'.$request->get('query').'%'))
      )
->orWhere(
      $qb->expr()->like('i.description', $qb->expr()->literal('%'.$request->get('query').'%'))
      )
->orWhere(
      $qb->expr()->like('i.author', $qb->expr()->literal('%'.$request->get('query').'%'))
      );

nameさて、の各フィールドの進め方がわかりませんtags

すべてのタグを文字列として返すエンティティで仮想フィールドを使用しようとしましたImageが、後でクエリビルダーで使用できません。

どうもありがとう!

4

1 に答える 1

2
SELECT i FROM YourBundle:Image i
LEFT JOIN i.tags t
WHERE i.code LIKE :q OR i.desc LIKE :q OR i.author LIKE :q OR t.name LIKE :q

これはうまくいくはずです。

qb の場合:

$qb->leftJoin('i.tags', 't')
   ->where($qb->expr()->like('t.name', $qb->expr()->literal('%' . $query . '%')));
于 2012-11-03T12:19:42.587 に答える