Doctrine查询构建器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Doctrine查询构建器相关的知识,希望对你有一定的参考价值。

我在symfony3.4中使用了一个doctrine 2,我有一个复杂的查询,它是:

$query = $this->createQueryBuilder(
                        'SELECT id FROM AppBundle:Room  WHERE id NOT IN ( SELECT room_id FROM AppBundle:Bookings  WHERE  NOT ( checkOut <= :check_in OR checkIn >= :check_out ) ) ORDER BY id'
                )
                ->setParameter('check_in', $request->query->get('check-in'))
                ->setParameter('check_out', $request->query->get('check-out'))
                ->getQuery();

        return $rooms = $query->execute() ;

我的问题是当我执行此查询时,我收到一个错误,即:

[Syntax Error] line 0, col 7: Error: Expected IdentificationVariable | ScalarExpression | AggregateExpression | FunctionDeclaration | PartialObjectExpression | "(" Subselect ")" | CaseExpression, got 'SELECT'
答案

createQueryBuilder方法需要一个字符串作为第一个参数,但是你提供了一个完整的查询语句,结果将是这样的:

从表中选择选择ID ....

一个引发异常的粗体部分是createQueryBuilder方法中的查询。

试试这个:

$this->createQueryBuilder('alias')->addSelect('alias.id')
->where(...)
->orderBy(...)

希望能帮助到你

编辑

在你把旧代码放在where后面的地方,但是在查询构建器中,你可以在没有sql的情况下构建你的查询,让doctrine为你构建查询

检查这个doc

以上是关于Doctrine查询构建器的主要内容,如果未能解决你的问题,请参考以下文章

Doctrine查询构建器

ZF2 Doctrine - 使用查询构建器如何指向存储库中的自定义方法

首先在doctrine查询构建器中选择完全匹配

在 Symfony Doctrine 查询构建器中使用 PostgreSQL NOT SIMILAR TO

如何在doctrine zend中没有实体的情况下继续加入查询构建器

避免使用Doctrine DBAL查询构建器select语句将驼峰别名名称转换为小写