【发布时间】:2018-05-18 08:57:41
【问题描述】:
我有以下函数来使用Haversine公式计算两点之间的距离:
public static function getByDistance($distance)
{
$pubsFiltered = DB::select(
'SELECT * FROM
(SELECT *, (6371 * acos(cos(radians(40.4169473)) * cos(radians(latitude)) *
cos(radians(longitude) - radians(-3.7035285)) +
sin(radians(40.4169473)) * sin(radians(latitude))))
AS distance
FROM pubs) AS distances
WHERE distance < ' . $distance . '
ORDER BY distance
;
');
return $pubsFiltered;
}
这是返回一个数组而不是一个集合,这正是我所需要的。
如果我将 DB 更改为 Pub,它会返回一个错误,因为我使用我的表“pubs”计算“距离”的子查询。
如何更改整个函数或仅更改子查询以获得我的 Pub 模型实例?...我必须在 mysql 中使用设置/声明变量吗?
非常感谢!!
【问题讨论】:
-
你能不能不只是做
$result = collect($pubsFiltered);让它成为一个集合?
标签: laravel eloquent subquery haversine