gpt4 book ai didi

php - Doctrine2 新语法

转载 作者:行者123 更新时间:2023-11-28 23:28:28 25 4
gpt4 key购买 nike

http://sqlfiddle.com/#!9/b2b34e/7

我正在尝试找出如何使用 Doctrine2 的新语法编写以下内容:

SELECT
id, username, (
6371 * acos (
cos ( radians(53.3646732) )
* cos( radians( latitude ) )
* cos( radians( longitude ) - radians(-6.235036) )
+ sin ( radians(53.3646732) )
* sin( radians( latitude ) )
)
) AS distance
FROM users
HAVING distance < 50
ORDER BY distance
LIMIT 0 , 20;

到目前为止我已经试过了:

$query = $em->createQuery('
SELECT NEW GU\UserBundle\Model\NearbyUser(u.id,
6371 * acos (
cos ( radians(53.3646732) )
* cos( radians( u.latitude ) )
* cos( radians( u.longitude ) - radians(-6.235036) )
+ sin ( radians(53.3646732) )
* sin( radians( u.latitude ) )
)
)
FROM GU\UserBundle\Entity\User u');

如何将此部分也设置为名为 distance 的变量?不会抛出错误,所以我可以使用它 HAVING distance < 50 :

6371 * acos (
cos ( radians(53.3646732) )
* cos( radians( latitude ) )
* cos( radians( longitude ) - radians(-6.235036) )
+ sin ( radians(53.3646732) )
* sin( radians( latitude ) )
)
) AS distance

更新:我认为我在这部分做的不对:

$query = $em->createQuery('
SELECT NEW GU\UserBundle\Model\NearbyUser(u.id,
(6371 * acos (
cos ( radians(53.3646732) )
* cos( radians( u.latitude ) )
* cos( radians( u.longitude ) - radians(-6.235036) )
+ sin ( radians(53.3646732) )
* sin( radians( u.latitude ) )
)) as distance
)
FROM GU\UserBundle\Entity\User u');

给出错误:

[Syntax Error] line 0, col 367: Error: Expected Doctrine\ORM\Query\Lexer::T_FROM, got ')'

最佳答案

据我所知,您不能使用 SELECT NEW 语法来做到这一点,而且您尝试做的无论如何都是无效的语法,因此您有两个选择:

  1. 放下 SELECT NEW 并加载 u.id,您的公式在这里作为距离 作为数组,然后根据需要创建实体(并将它们附加到实体管理器)。这将产生更少的行并且会更有效,因为您将需要更少的实体(或者可能不需要任何实体,例如,如果您不打算保留它们)
  2. 延迟加载所有实体并按距离过滤它们,销毁所有未通过检查的实体以释放内存。这将消耗更多的资源,而不是推荐的方式。

关于php - Doctrine2 新语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38295697/

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