1

我有两个实体:ImageTags,具有多对多关系。

Image有一些字段:code, description,authortags实现了多对多关系。

Tag只有两个字段:nameimages.

我正在构建一个非常通用的搜索表单,只有一个输入字段,您可以在其中编写任何文本,然后将返回Image在其或字段或其任何标签字段中包含该文本的任何内容。codedescriptionauthorname

对于非关系字段,这很容易。我在我的控制器中有(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 回答