Php Doctrine2复杂的多对多搜索查询
我正在创建一个应用程序,该应用程序具有一个与其他对象具有多对多关系的实体。让我来布置实体:Php Doctrine2复杂的多对多搜索查询,php,symfony,doctrine-orm,many-to-many,dql,Php,Symfony,Doctrine Orm,Many To Many,Dql,我正在创建一个应用程序,该应用程序具有一个与其他对象具有多对多关系的实体。让我来布置实体: Entry=主对象 区域=通过“\u Entry\u Region”参考表具有多对多条目 类型=通过“\u Entry\u Type”参考表具有多对多条目 Tag=通过“\u Entry\u Tag”参考表进行多对多输入 现在在前端,用户可以为需要加载的条目设置一些过滤器。在人类语言中,查询需要如下所示 Get the entries WHERE region is (1 or 2 or 3) AN
- Entry=主对象
- 区域=通过“\u Entry\u Region”参考表具有多对多条目
- 类型=通过“\u Entry\u Type”参考表具有多对多条目
- Tag=通过“\u Entry\u Tag”参考表进行多对多输入
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));
您也可以考虑查看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));
这比我做的好多了,你不必担心消毒。这比我做的好多了,你不必担心消毒。