Postgresql Laravel 4无法查询postgres函数
我有一个postgres函数distance(),它确定两点之间的距离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
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'
);