Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 条令:将createQuery查询转换为createQueryBuilder_Php_Doctrine Orm_Dql_Query Builder - Fatal编程技术网

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);