[英]Doctrine2 complex multiple many-to-many search query
我正在创建一个具有实体的应用程序,该实体与其他对象具有多个多对多关系。 让我布置实体:
现在,在前端,用户可以为需要加载的条目设置一些过滤器。 在人类语言中,查询需要像这样。
Get the entries WHERE region is (1 or 2 or 3) AND type is ( 3 or 4 or 5 ) AND tag is ( 4 OR 6 or 1)
我目前正在使用这段代码:
$query = $this->em->createQuery('SELECT m.id FROM Entity\Entry e WHERE :region_id MEMBER OF e.regions);
$query->setParameter('region_id', 1);
$ids = $query->getResult();
这给了我相应区域的条目ID。 但是不可能在setParameter()中添加区域id的数组。 我也无法在文档中找到如何在多个相关实体上执行此操作,例如基于人类的查询:
Get the entries WHERE region is (1 or 2 or 3) AND type is ( 3 or 4 or 5 ) AND tag is (
您还可以考虑查看D2查询构建器。 更加冗长,但是一旦语法失效,构建更复杂的查询就会容易得多。
就像是:
$qb = $this->em->createQueryBuilder();
$qb->addSelect('entry');
$qb->addSelect('region');
$qb->addSelect('type');
$qb->addSelect('tag');
$qb->from('MyBundle:Entry', 'entry');
$qb->leftJoin('entry.regions','region');
$qb->leftJoin('entry.types', 'type');
$qb->leftJoin('entry.tags', 'tag');
$qb->andWhere($qb->expr()->in('region.id',$regions));
$qb->andWhere($qb->expr()->in('type.id', $types));
$qb->andWhere($qb->expr()->in('tag.id', $tags));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.