首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel 4无法查询postgres函数

Laravel 4无法查询postgres函数
EN

Stack Overflow用户
提问于 2014-03-25 20:30:58
回答 1查看 802关注 0票数 0

我有一个postgres函数,距离(),它决定两点之间的距离。

代码语言:javascript
复制
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搜索中找到半径内的所有地址。使用我的查询生成器

代码语言:javascript
复制
$query->where(\DB::select('select distance(coords,'.$parameters['lat'].','.$parameters['lon'].')') < 9);

这应该是查找地址(例如)中的和弦字段。( '39.606912,-104.881802')并在查询中解析。它错误地说列“和弦”不存在。如果我用“地址”。“和弦”,它就说找不到表。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-25 20:34:43

通常DB::raw()在这些情况下工作,命令中缺少逗号和引号。

代码语言:javascript
复制
$query->where(\DB::select(\DB::raw('select distance(coords,'.$parameters['lat'].','.$parameters['lon'].')')), '<', '9');

为了确保Laravel正在以您需要的方式构建它,并且它正在构建的查询将在您的数据库上工作,请使用以下命令将查询转储到日志中:

代码语言:javascript
复制
DB::listen(function($sql, $bindings, $time) { 
    Log::info($sql); 
    Log::info($bindings); 
});

您的错误是您丢失了一个FROM,所以您的查询应该是:

代码语言:javascript
复制
$query->where(
    \DB::select(
        \DB::raw('select distance(addresses.coords,'.$parameters['lat'].','.$parameters['lon'].') FROM addresses')
    )
    , '<', '9'
);

但是,如果这只是查询的一部分,而不是整个查询,则不应该需要FROM,除非您是从另一个表中获取此信息,而该信息尚未出现在list的主查询中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22645623

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档