我有一个postgres函数,距离(),它决定两点之间的距离。
DECLARE
x float = 69.1 * (lat2 - lat1);
y float = 69.1 * (lon2 - lon1) * cos(lat1 / 57.3);
BEGIN
RETURN sqrt(x * x + y * y);
END在Postgres中执行时,这很好。但是现在我想用它在Laravel 4搜索中找到半径内的所有地址。使用我的查询生成器
$query->where(\DB::select('select distance(coords,'.$parameters['lat'].','.$parameters['lon'].')') < 9);这应该是查找地址(例如)中的和弦字段。( '39.606912,-104.881802')并在查询中解析。它错误地说列“和弦”不存在。如果我用“地址”。“和弦”,它就说找不到表。
发布于 2014-03-25 20:34:43
通常DB::raw()在这些情况下工作,命令中缺少逗号和引号。
$query->where(\DB::select(\DB::raw('select distance(coords,'.$parameters['lat'].','.$parameters['lon'].')')), '<', '9');为了确保Laravel正在以您需要的方式构建它,并且它正在构建的查询将在您的数据库上工作,请使用以下命令将查询转储到日志中:
DB::listen(function($sql, $bindings, $time) {
Log::info($sql);
Log::info($bindings);
});您的错误是您丢失了一个FROM,所以您的查询应该是:
$query->where(
\DB::select(
\DB::raw('select distance(addresses.coords,'.$parameters['lat'].','.$parameters['lon'].') FROM addresses')
)
, '<', '9'
);但是,如果这只是查询的一部分,而不是整个查询,则不应该需要FROM,除非您是从另一个表中获取此信息,而该信息尚未出现在list的主查询中。
https://stackoverflow.com/questions/22645623
复制相似问题