【问题标题】:Write a simple query and solve: [Syntax Error] line 0, col 7: Error: Expected IdentificationVariable编写一个简单的查询并解决: [Syntax Error] line 0, col 7: Error: Expected IdentificationVariable
【发布时间】:2021-11-13 01:59:12
【问题描述】:

我遇到了这个错误,我想了解一下:

[语法错误] 第 0 行,第 7 列:错误:预期标识变量 | 标量表达式 |聚合表达式 |功能声明 | 部分对象表达式 | "(" 子选择 ")" | CaseExpression,得到 '选择'

因为我已经这样做了:

public function findByBookings($start, $leave): array
{
    $qb = $this->createQueryBuilder('SELECT * FROM room as r JOIN booking as b ON r.id = b.r WHERE b.r NOT IN 
    (SELECT b.room FROM b WHERE b.startDate <= :startDate AND b.leaveDate >= :leaveDate, OR WHERE b.startDate >= :startDate AND b.leaveDate <= :leaveDate, OR WHERE b.startDate >= :startDate AND b.leaveDate >= :leaveDate, OR WHERE b.startDate <= :startDate AND b.leaveDate <= :leaveDate)')
        ->setParameter(':start', $start)
        ->setParameter(':leave', $leave);

    $query = $qb->getQuery();

    $results = $query->getResult();

    return $results;

  }

如果我将 $this->createQueryBuilder 更改为 $this->createQuery() 我还有另一个错误:

未定义的方法“createQuery”。方法名称必须以 findBy、findOneBy 或 countBy!

为什么 Symfony 会在我的函数名称以“findBy”开头时返回此错误?

谢谢

【问题讨论】:

  • OR WHERE...??
  • 你觉得不好?

标签: php sql symfony


【解决方案1】:

首先你需要修复查询

$dql = <<<EOL
SELECT * 
FROM room AS r 
  JOIN booking AS b ON r.id = b.r 
 WHERE b.r NOT IN 
    (SELECT b.room 
     FROM booking AS b
     WHERE 
       b.startDate <= :startDate AND b.leaveDate >= :leaveDate OR  
       b.startDate >= :startDate AND b.leaveDate <= :leaveDate OR 
       b.startDate >= :startDate AND b.leaveDate >= :leaveDate OR
       b.startDate <= :startDate AND b.leaveDate <= :leaveDate
    ) AS subq
EOL;

然后让实体管理器对其执行原始查询。

$query = $this->getEntityManager()
     ->createQuery($dql)
     ->setParameter('startDate', $start)
     ->setParameter('leaveDate', $leave);

$results = $query->getResult();

【讨论】:

  • 谢谢你的回答,我试过了,但我有同样的事情。
  • 实体管理器应该有createQuery方法。你是什​​么意思?
  • 好的,谢谢,所以我为创建查询添加了实体管理器。我有与我提供的代码相同的错误。谢谢你的回答
  • [语法错误] 第 0 行,第 8 列:错误:预期标识变量 |标量表达式 |聚合表达式 |功能声明 |部分对象表达式 | "(" 子选择 ")" | CaseExpression,得到'*'
猜你喜欢
  • 2020-11-06
  • 2020-06-29
  • 2022-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-18
  • 2023-02-03
  • 2021-02-08
相关资源
最近更新 更多