Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql Laravel 4无法查询postgres函数_Postgresql_Laravel_Geolocation_Laravel 4 - Fatal编程技术网

Postgresql Laravel 4无法查询postgres函数

Postgresql Laravel 4无法查询postgres函数,postgresql,laravel,geolocation,laravel-4,Postgresql,Laravel,Geolocation,Laravel 4,我有一个postgres函数distance(),它确定两点之间的距离 DECLARE x float = 69.1 * (lat2 - lat1); y float = 69.1 * (lon2 - lon1) * cos(lat1 / 57.3); BEGIN

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

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中执行时效果很好。但现在我想在Laravel4搜索中使用它来查找半径内的所有地址。使用查询生成器

$query->where(\DB::select('select distance(coords,'.$parameters['lat'].','.$parameters['lon'].')') < 9);
$query->where(\DB::select('select distance(坐标,'.$parameters['lat'].','.$parameters['lon'].'))<9);
这应该查看地址(例如“39.606912,-104.881802”)中的coords字段,并在查询中解析该字段。表示“coords”列不存在时出错。如果我使用“addresses”。“coords”则表示找不到表。

通常DB::raw()在这些情况下起作用,并且命令中缺少一些逗号和引号

$query->where(\DB::select(\DB::raw('select distance(coords,'.$parameters['lat'].','.$parameters['lon'].')')), '<', '9');
您的错误是缺少的,因此您的查询应该是:

$query->where(
    \DB::select(
        \DB::raw('select distance(addresses.coords,'.$parameters['lat'].','.$parameters['lon'].') FROM addresses')
    )
    , '<', '9'
);
$query->where(
\DB::选择(
\DB::raw('select distance(addresses.coords,'.$parameters['lat'].','.$parameters['lon'.])FROM addresses')
)

,“我仍然得到同样的结果,它没有将coords视为addresses表中的一列(尽管它在那里)。这种选择在Postgres中直接起作用吗?
select distance(coords,39.606912,-104.881802)
加上你以前拥有的任何东西?我不是指函数,而是指它的用法:选择你正在使用的这个函数。你只给了我们你查询的一小部分,一个简单的where,但你的查询比那大,不是吗?所以你必须调试所有的东西。我只是编辑了我的答案,添加了一个方法来获取生成的查询,应该是可在postgres中执行。我将“addresses”。“coords”更改为“addresses.coords”,这在其他laravel查询中也适用。但是,现在在我解析coords字段时,它说“不允许负子字符串长度”。这表明它只是获取字符串“addresses.coords”如果我这样做$query->where(\db::select(\db::raw(“select cpdistance(“.'addresses.coords.”,'39.654872,-104.996809'))))))[0]->cpdistance),'函数需要从addresses coords字段接收一个形式为'222.222111.111'的输入。
$query->where(
    \DB::select(
        \DB::raw('select distance(addresses.coords,'.$parameters['lat'].','.$parameters['lon'].') FROM addresses')
    )
    , '<', '9'
);