Doctrine查询构建器

时间:2017-12-19 16:11:20

标签: mysql symfony doctrine-orm query-builder

我在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'

1 个答案:

答案 0 :(得分:1)

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

  

从表

中选择选择ID ...

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

请改为尝试:

height

希望有所帮助

  

修改

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

检查此doc