【发布时间】:2016-09-18 18:57:55
【问题描述】:
我有一个这样写的学说查询:
$qb = $this->createQueryBuilder('u');
$qb
->leftJoin('u.relatedEventTypes', 'relatedEventTypes')
->leftJoin('u.relatedGenres', 'relatedGenres')
->where(
$qb->expr()->eq('u.type', ':userType')
)
->setParameter('userType', 'dj')
;
我想再添加一个 where 语句,用于查找两个坐标之间的距离并处理该数据。查询如下所示:
$qb
->andWhere(
'( 6371 * acos( cos( radians(lat_placeholder) ) * cos( radians(lat_placeholder) ) * cos( radians(lng_placeholder) - radians(lng_placeholder) ) +
sin( radians(lat_placeholder) ) * sin( radians(la t_placeholder) ) ) ) AS distance
HAVING distance < distanceToTravel_placeholder)'
;
我找不到一种方法来完成这项工作,这意味着我无法弄清楚如何使用占位符来编写它,因此我可以从一开始就使用查询中的变量(例如 u.locLat、u.distanceToTravel 等) .有可能吗?
【问题讨论】:
-
您应该首先在
andWhere方法中删除LIMIT、ORDER BY。 -
我只是使用了原始的 sql 查询,当然 limit 和 order by 语句不属于那里,但我认为这会让我的问题更精确
标签: mysql sql symfony doctrine-orm