【问题标题】:LIKE on subquery in WHERE clause with Doctrine2使用 Doctrine2 对 WHERE 子句中的子查询进行 LIKE
【发布时间】:2014-01-17 12:35:01
【问题描述】:

我在一个 symfony2 项目中,我遇到了以下查询的问题:

SELECT count(a) 
FROM CoreBundle:Agency a 
WHERE (
    SELECT count(c.id)
    FROM CoreBundle:Agency a1, CoreBundle:Client c
    WHERE a1.id = c.agency AND a1.id = a.id
) LIKE "%1%"

当我想要结果时,Doctrine2 返回此错误:

错误:预期 =、、>、>=、!=、得到 'LIKE'

相同的查询(在 SQL 中而不是 DQL 中改编)工作正常。

我试图找到解决方案,但没有任何结果......

感谢您的帮助!

【问题讨论】:

  • 您希望子查询返回什么样的值?也许我们可以帮助以 Doctrine 接受的方式制作它。 MySQL 本身似乎支持在该位置使用LIKE
  • 子查询有时会有所不同,它可以返回 int 或 string 值,在这个例子中它只返回 int 值,因为它是一个 COUNT()
  • 您可以将子查询的结果转换为字符串吗?不知道如何在 symfony 中做到这一点,但一定有办法。
  • 如果不进行 2 次查询(首先是子查询,然后是查询),我不知道该怎么做,而且我不确定结果。也许有一种方法可以用一个学说2函数来做到这一点,但我不知道是哪一个
  • 我不太了解您的问题。您正在尝试计算至少拥有 1 个客户的代理机构的数量吗?为什么要使用 LIKE 作为计数结果?

标签: sql symfony doctrine-orm subquery doctrine-query


【解决方案1】:

该错误告诉我 DQL 解析器不理解您的查询。在这种情况下,您有几个选择。

您可以扩展 DQL 解析器,以便 Doctrine 将您的查询识别为有效。您可以在 Doctrine 食谱文章 DQL User Defined Functions 中阅读有关这样做的内容。

另一种选择是使用Native Query.

我希望这会有所帮助。我敢肯定还有其他方法。我建议扩展解析器,以便您可以继续使用带有新功能的查询生成器。

【讨论】:

  • 确实,我会在 DQL 用户定义函数中大显身手,但在这种情况下,它是一个基本查询,它不使用任何 MySQL 函数或其他任何东西......有点倒退。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-25
  • 1970-01-01
  • 1970-01-01
  • 2023-03-13
  • 2018-08-01
  • 1970-01-01
相关资源
最近更新 更多