gpt4 book ai didi

arrays - DQL 返回实体数组而不是对象

转载 作者:行者123 更新时间:2023-12-02 05:03:06 24 4
gpt4 key购买 nike

通常,如果我运行如下所示的 DQL 查询,它将返回实体对象列表:

$d = $this->getDoctrine()->getRepository('xxxWebsiteBundle:Locations')->createQueryBuilder('l');
->where('l.enabled = :enabled')
->setParameter('enabled', 1)
$result= $d
->getQuery();

但是,如果我添加一个选择,那么它会返回一个数组:

$d = $this->getDoctrine()->getRepository('XXXWebsiteBundle:Locations')->createQueryBuilder('l');
$d
->select('l')
->addSelect(
'( 3959 * acos(cos(radians(' . $latitude . '))' .
'* cos( radians( l.latitude ) )' .
'* cos( radians( l.longitude )' .
'- radians(' . $longitude . ') )' .
'+ sin( radians(' . $latitude . ') )' .
'* sin( radians( l.latitude ) ) ) ) as distance'
)
->where('l.enabled = :enabled')
->setParameter('enabled', 1)
->having('distance < :distance')
->setParameter('distance', $requestedDistance)
->orderBy('distance', 'ASC');
$closeresult= $d
->getQuery();

因此使用第一个查询我可以执行以下操作:

foreach($result->getResult() as $location){
echo $location->getName()
}

但是,使用第二个查询时,我必须使用以下我认为不正确的查询:

foreach($result->getResult() as $location){
echo $location[0]->getName()
}

有什么想法可以改进吗?

最佳答案

从 Doctrine ORM 2.2 开始,您可以使用 HIDDEN关键字。

SELECT a, SOME_EXPR() AS HIDDEN sortCond FROM Entity a ORDER BY sortCond DESC

在您的示例中,如下所示:

$d = $this
->getDoctrine()
->getRepository('XXXWebsiteBundle:Locations')
->createQueryBuilder('l');

$d
->select('l')
->addSelect(
'( 3959 * acos(cos(radians(' . $latitude . '))' .
'* cos( radians( l.latitude ) )' .
'* cos( radians( l.longitude )' .
'- radians(' . $longitude . ') )' .
'+ sin( radians(' . $latitude . ') )' .
'* sin( radians( l.latitude ) ) ) ) AS HIDDEN distance'
)
->where('l.enabled = :enabled')
->setParameter('enabled', 1)
->having('distance < :distance')
->setParameter('distance', $requestedDistance)
->orderBy('distance', 'ASC');

$closeresult = $d->getQuery();

关于arrays - DQL 返回实体数组而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15272765/

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