在Doctrine语句中添加一个包含子句

Tod*_*man 7 php sql doctrine symfony doctrine-orm

我是Doctrine的新手,我正在试图弄清楚如何在我的陈述中添加having子句.基本上我希望能够根据用户选择的属性过滤掉返回的项目.代码如下:

// create query builder
    $qb = $this->getEntityManager()->createQueryBuilder();

    $qb->select('p')
        ->from($this->_entityName, 'p')
        ->leftJoin('p.options', 'o')
        ->where('p.active = :active')
        ->setParameter('active', 1);

    // add filters
     $qb->leftJoin('o.attributes', 'a');
                $ands = array();

                foreach ($value as $id => $values)
                { echo count($values);
                    $ands[] = $qb->expr()->andX(
                        $qb->expr()->eq('a.attribute_id', intval($id)),
                        $qb->expr()->in('a.attribute_value_id', array_map('intval', $values))
                        $qb->having('COUNT(*)=3) // THIS DOESN'T WORK
                        //$qb->expr()->having('COUNT(*)=3) // THIS DOESN'T WORK EITHER
                    );
                }

                $where = $qb->expr()->andX();


                foreach ($ands as $and)
                {
                    $where->add($and);
                }
                $qb->andWhere($where);
                $result = $qb->getQuery()->getResult();
                return $result;
Run Code Online (Sandbox Code Playgroud)

当我尝试使用having()子句执行语句时,我收到此错误:在此上下文中不允许使用"Doctrine\ORM\QueryBuilder"类型的表达式.

没有having()子句,一切都很完美.

我不知道如何解决这个问题.

ihs*_*san 13

HAVING子句需要GROUP BY.在学说中它会是这样的:

$qb->groupBy('p.id'); // or use an appropriate field
$qb->having('COUNT(*) = :some_count');
$qb->setParameter('some_count', 3);
Run Code Online (Sandbox Code Playgroud)

假设你正在使用mysql,这里有一个having子句教程:http://www.mysqltutorial.org/mysql-having.aspx


Đur*_*nić 1

也许您应该将数字 3 绑定到参数:

$qb->having('COUNT(*)=:some_count')
$qb->setParameter('some_count',3)
Run Code Online (Sandbox Code Playgroud)