gpt4 book ai didi

mysql - 如何在 WHERE 子句中使用带有 SELECT 的 Symfony?我收到错误

转载 作者:行者123 更新时间:2023-11-29 16:18:33 26 4
gpt4 key购买 nike

我正在将 Mysql SQL 迁移到 Symfony 项目,当我执行 SQL 时,我从 TLP 收到错误。我猜问题出在 WHERE 子句中的第二个 SELECT 中。

如果我使用原始 SQL,并且在没有 symfony 框架的情况下使用,我没有问题。此外,如果我将 WHERE 子句与“(vars.ns IN (SELECT...))”一起使用,我不会收到任何错误,但 SQL 一定不能是这样的。

date_default_timezone_set('UTC');
$em = $this->getContainer()->get('doctrine')->getManager();
$query = $em->createQuery("SELECT vars.dm, vars.ns, vars.mc, vars.ac, vars.sf, vars.cn, vars.mp, vars.ta, vars.mo, vars.mh, vars.pa, vars.sp, vars.so, vars.sh, vars.sn, vars.mm, vars.ms, vars.gs, vars.a1, vars.a2, vars.updated FROM BaseBundle:Vars vars WHERE (SELECT device.id FROM BaseBundle:Device device WHERE device.ns = vars.ns AND device.idUser IS NOT NULL AND device.idUser != '422' AND device.idUser != '819') AND vars.idDevice IS NOT NULL AND vars.updated > :time")->setParameter('time', date('Y-m-d H:i:s', strtotime('-31 days')));
$historics = $query->getResult();

我收到此错误:

  [Doctrine\ORM\Query\QueryException]
[Syntax Error] line 0, col 233: Error: Expected Literal, got 'SELECT'

此 SQL 必须返回 276 行,确实如此,但在 symfony 中则不然。对这个问题有什么想法吗?非常感谢,

更新:MYSQL 原始查询

SELECT 
vars.dm,
vars.ns,
vars.mc,
vars.ac,
vars.sf,
vars.cn,
vars.mp,
vars.ta,
vars.mo,
vars.mh,
vars.pa,
vars.sp,
vars.so,
vars.sh,
vars.sn,
vars.mm,
vars.ms,
vars.gs,
vars.a1,
vars.a2,
vars.updated
FROM
table_3.vars
WHERE
(SELECT
device.id_user
FROM
table_3.device
WHERE
device.ns = vars.ns
AND device.id_user IS NOT NULL
AND device.id_user != '422'
AND device.id_user != '819')
AND vars.id_device IS NOT NULL
AND vars.updated > NOW() - INTERVAL 30 DAY

最佳答案

首先,Doctrine 不使用 SQL,而是使用 DQL。 DQL 看起来很相似,但当您谈论属性和字段时,其工作方式略有不同。创建 Doctrine Query 时,您必须使用属性名称而不是字段名称,并且您所引用的实体必须具有此类属性。您的 BaseBundle:Vars 实体是否存在?它是否具有查询字符串中提到的属性?设备实体怎么样?

关于mysql - 如何在 WHERE 子句中使用带有 SELECT 的 Symfony?我收到错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54646628/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com