具有 MEMBER OF 和空参数的 Doctrine querybuilder
Doctrine querybuilder with MEMBER OF and empty parameter
下面的查询仅在我 select 参数标记中的内容时有效,否则它 return 为空结果。当参数标签为空时,我该怎么做才能让它像没有 where 限制一样工作。在下面的例子中,f.tags 是实体 Student 和实体 Tags 之间的多对多关系字段。
public function FindStudent($tags)
{
$qb = $this
->createQueryBuilder('s');
if ($tags) {
$qb->andWhere(':tag MEMBER OF s.tags')
->setParameter('tag', $tags);
}
$qb->Select('s');
return $qb
->getQuery()
->getResult();
}
在探查器 Doctrine 查询中,当没有 selected 时,IN 为空。我想做的是当参数标签为空时完全没有 INNER JOIN 和 WHERE IN。
AND EXISTS (SELECT 1 FROM student_tag f3_ INNER JOIN tag s4_ ON f3_.tag_id = s4_.id WHERE f3_.student_id = f0_.id AND s4_.id IN ())
可能
if(!empty($tags)){
会成功的。
根据您的评论进行编辑:
在那种情况下:
use Doctrine\Common\Collections\ArrayCollection;
....
if(!empty($tags) && ($tags instanceof ArrayCollection && !$tags->empty())){
下面的查询仅在我 select 参数标记中的内容时有效,否则它 return 为空结果。当参数标签为空时,我该怎么做才能让它像没有 where 限制一样工作。在下面的例子中,f.tags 是实体 Student 和实体 Tags 之间的多对多关系字段。
public function FindStudent($tags)
{
$qb = $this
->createQueryBuilder('s');
if ($tags) {
$qb->andWhere(':tag MEMBER OF s.tags')
->setParameter('tag', $tags);
}
$qb->Select('s');
return $qb
->getQuery()
->getResult();
}
在探查器 Doctrine 查询中,当没有 selected 时,IN 为空。我想做的是当参数标签为空时完全没有 INNER JOIN 和 WHERE IN。
AND EXISTS (SELECT 1 FROM student_tag f3_ INNER JOIN tag s4_ ON f3_.tag_id = s4_.id WHERE f3_.student_id = f0_.id AND s4_.id IN ())
可能
if(!empty($tags)){
会成功的。
根据您的评论进行编辑: 在那种情况下:
use Doctrine\Common\Collections\ArrayCollection;
....
if(!empty($tags) && ($tags instanceof ArrayCollection && !$tags->empty())){