2

这是我当前的查询,它工作正常:

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

再一次,这不能正常工作,我不知道如何以与上述相同的格式获得结果。谢谢!

4

1 回答 1

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 子句变得更加复杂,表达式的嵌套也将变得更加复杂。

于 2011-12-13T18:14:44.467 回答