Php 条令:将createQuery查询转换为createQueryBuilder
这是我的当前查询,它运行良好:Php 条令:将createQuery查询转换为createQueryBuilder,php,doctrine-orm,dql,query-builder,Php,Doctrine Orm,Dql,Query Builder,这是我的当前查询,它运行良好: $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 = $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;
}
我想将其转换为QueryBuilderAPI结构,这是我到目前为止所拥有的,但它不能正常工作。(我需要与上面相同格式的结果)
再说一次,这不能正常工作,我不知道如何以与上面相同的格式获得结果。谢谢 接近,但没有雪茄。为了创建正确的WHERE子句,您需要学习如何使用Doctrine附带的Expr类 在您提供的示例中,实际上您的目标如下(未测试): 随着WHERE子句变得越来越复杂,表达式的嵌套也会越来越复杂。
->add('leftJoin','s.case c')
不起作用,我不得不使用->leftJoin('s.case','c')
$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);
$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);