当前位置: 首页 > 知识库问答 >
问题:

Laravel/Eloquent-无法执行原始查询

居琛
2023-03-14

这是正在执行查询的函数

    public static function getNearbyCityReport(float $lon, float $lat, float $rangeInKm){
    $query = "
        SELECT
            name,
            population,
            round((ST_Distance(rpoint, 'POINT( ? ? )', True)/1000)::numeric, 1) as distance,
            round(degrees(ST_Azimuth(rpoint, 'POINT( ? ? )'))::numeric,1) AS azimuth
        FROM
            gis_cities
        WHERE
            ST_DWithin(rpoint, 'POINT( ? ? )', 1000*?, True)
            AND
            feature_code != 'PPLX'
        ORDER BY distance;        
    ";
    $query = preg_replace('#\n#', ' ', $query);
    $query = trim(preg_replace('#\s{2,}#', ' ', $query));
    $expression = DB::raw($query);
    $result = DB::select($expression, [$lon, $lat, $lon, $lat, $lon, $lat, $rangeInKm]);
    dd($result);

运行此函数时,出现以下异常:

SQLSTATE[HY093]:无效的参数编号:未定义参数(SQL:选择名称、总体、圆((ST_Distance(rpoint,'POINT(24.8 43.3648))):数字,1)作为距离,圆(度(ST_Axitation(rpoint,'POINT(24.8 43.3648)):数字,1)作为来自ST_DWithin(rpoint,'POINT(24.8 43.3648)所在城市的方位角)“,1000*300,True)和特征代码!='PPLX'按距离排序;)

奇怪的是,异常中显示的构建查询似乎没有遗漏任何内容,如果我在数据库中运行该查询,它就会正常工作。我怎样才能做到这一点?

稍后编辑:

显然,问题实际上在于PDO级别,是由我试图在引用的字符串中添加一些参数引起的:

(ST_Distance(rpoint, 'POINT( ? ? )', True)/1000)

看到'点(??)的零件。如果我从查询中删除所有引号,那么它就可以工作,但当然它不再是有效的postgis查询了。有人知道这个查询应该如何编写,以便PDO接受它吗?

共有1个答案

微生博简
2023-03-14

您必须将两个坐标合并到一个绑定中:

(ST_Distance(rpoint, 'POINT( ? )', True)/1000)

$result = DB::select($expression, [$lon.' '.$lat, ...]);
 类似资料:
  • 问题内容: 因此,我有一个很小的查询可以在我的数据库上运行,并且在MySQL Workbench中可以正常工作。基本上,再次使用带有左联接的SELECT和带有左联接的UNION。 在尝试将其翻译为Laravel时没有成功。 我遇到了错误 Builder.php 1249行中的ErrorException:未定义的属性:Illuminate \ Database \ Eloquent \ Build

  • 因此,我在数据库上运行了这个小查询,它在MySQL工作台上运行良好。基本上,使用左连接进行选择,然后再次使用左连接进行并集。 年,他试图把它翻译成拉威尔,但没有成功。 我发现了错误 生成器中的错误异常。php第1249行:未定义的属性:Illumb\Database\Eloquent\Builder::$bindings 我如何在Laravel中执行一个完全原始的查询,或者如何在Laravel中以

  • 问题内容: 如何通过带有Strongloop的REST API执行原始查询并公开结果? 我已经阅读了有关使用的内容,但是找不到任何有效的示例。 问题答案: 这是一个基本的例子。如果您具有产品模型(/common/models/product.json),请通过添加/common/models/product.js文件来扩展模型: 这将创建以下端点示例:GET / Products / byCate

  • 我正在从db检索一个集合,想要删除它。这是密码。 这就是错误所在。 我也试着给所有的列名。

  • 问题内容: 我正在使用hibernate3.6.7进行映射。我将连接部分设置为静态。我需要服务程序永远运行,另一个服务将调用该服务的某些方法来查询数据库。当我让该服务运行时,第一天工作良好,但是第二天我调用它时,它给出了: 似乎连接已关闭。有人可以给我一些建议吗? 非常感谢你:) 问题答案: 听起来好像数据库已关闭连接或某个网络设备已终止套接字。您可以通过多种方法来解决此问题: 您可以经常在连接上

  • 问题内容: 我正在使用Struts2&Hibernate并在使用字符串搜索数据时出现以下错误,但是在使用数字搜索时对我有用。我从豆类和豆类中的字符串类型的已定义的属性中获取此值。 下面我提供代码: 豆类: 对应: 错误: 问题答案: 之所以引发,是因为Hibernate生成的SQL查询的SQL语法错误。构建查询的方式是错误的,不应将值(尤其是字符串值)连接到结果查询,因为此类代码容易受到SQL注入