具有相关实体字段的 where 子句的原则查询对象



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

Image有一些字段:codedescriptionauthortags,它们实现了多对多关系。

Tag只有两个字段:nameimages

我正在构建一个非常通用的搜索表单,只有一个输入字段,您可以在其中编写任何文本,然后它将返回在其codedescriptionauthor字段中具有该文本的任何Image,或其任何标签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').'%'))
);

现在,我不知道如何进行tags的每个name字段。

我曾尝试在Image实体中使用一个虚拟字段,该字段将所有标签作为字符串返回,但稍后无法在查询构建器中使用它。

多谢!

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 . '%')));

相关内容

  • 没有找到相关文章

最新更新