【发布时间】:2017-12-18 09:09:37
【问题描述】:
大家好,最近怎么样?在此先感谢。
我在 laravel 模型中编写了一个工作函数,它进行地理搜索并返回按距离搜索的顺序。效果很好。
public static function searchByDistance($distance, $unit)
{
//spatial queries
// $circle_radius = 6371;
$circle_radius = 3959;
$max_distance = $distance;
$lat = Auth::user()->getLoc()->latitude;
$lng = Auth::user()->getLoc()->longitude;
//get all nearby places
$nearbyusers = DB::select(
'SELECT * FROM
(SELECT users.id, users.country, places.name, places.state_code, places.latitude, places.longitude, (' . $circle_radius . ' * acos(cos(radians(' . $lat . ')) * cos(radians(latitude)) *
cos(radians(longitude) - radians(' . $lng . ')) +
sin(radians(' . $lat . ')) * sin(radians(latitude))))
AS distance
FROM users
LEFT JOIN places ON users.suburb=places.name) AS distances
WHERE distance < ' . $max_distance . '
ORDER BY distance;
');
$nearbyusers = (object)$nearbyusers;
return $nearbyusers;
}
但是我有一个问题。我想调用该函数,返回一个查询并继续对它进行add ->where() 操作,直到我准备好使用get() 并返回结果。
我不能使用where() or get(),我知道为什么。它的格式不正确。
有没有人可以帮助我修改/更改函数,以便在我返回 $nearbyusers 值后添加更多过滤器?
干杯
【问题讨论】:
-
您正在使用哪个 ORM / 查询构建器(如果有)?
-
@ClémentMalet 看起来很有口才。
-
您想在上述查询或任何其他查询上添加
where() or get()吗? -
我用的是雄辩的。我想添加 where()s 和最后一个 get() 原因是我可以通过上述查询按距离顺序进行搜索,我很兴奋我破解了它!但是我希望能够在此之外添加更多过滤器,例如年龄之间等
-
有什么方法可以帮我将这个原始查询转换为 ORM eloquent 吗?我一直在尝试不成功
标签: php mysql laravel geolocation xampp