这是我当前的查询,它运行正常:
$q = $this->_em->createQuery("SELECT s FROM app\models\Sub s
LEFT JOIN s.case c
WHERE s.type LIKE '%$type'
AND c.id = '$id'");
foreach ($q->getResult() as $row) {
$results[$row->getId()] = $row;
}
我想将它转换为QueryBuilder API结构,这是我到目前为止所做的,但它无法正常工作。 (我需要的结果与上面的格式相同)。
$q = $this->_em->createQueryBuilder();
$q->add('select', 's')
->add('from', 'app\models\Sub s')
->add('leftJoin', 's.case c')
->add('where', 's.type LIKE :type')
->add('where', 'c.id = :case');
->setParameter('type', "%$type");
->setParameter('case', $id);
而且,这不能正常工作,我不知道如何以与上面相同的格式获得结果。谢谢!
答案 0 :(得分:1)
关闭,但没有雪茄。您需要学习如何使用Doctrine附带的Expr类来创建正确的WHERE子句。
http://www.doctrine-project.org/docs/orm/2.1/en/reference/query-builder.html#expr-classes
在您提供的示例中,您实际上的目标是这样的(未经测试):
$q->add('select', 's')
->add('from', 'app\model\Sub s')
->add('leftJoin', 's.case c')
->add('where', $q->expr()->andX($q->expr()->like('s.type', ':type'), $q->expr()->eq('case', ':case')))
->setParameter('type', "%$type")
->setParameter('case', $id);
随着WHERE子句变得更复杂,表达式的嵌套也会变得更复杂。