重新,

我有以下疑问:

$property = 
    Property::select(
        DB::raw("title, lat, lng, ( 
            3959 * acos( 
                cos( radians(:lat) ) * 
                cos( radians( lat ) ) * 
                cos( radians( lng ) - radians(:lng) ) + 
                sin( radians(:lat) ) * 
                sin( radians( lat ) ) 
            ) 
        ) AS distance", ["lat" => $lat, "lng" => $lng, "lat" => $lat])
    )
    ->having("distance", "<", $radius)
    ->orderBy("distance")
    ->take(20)
    ->get();

不起作用:Invalid parameter number: mixed named and positional parameters.

是否有人知道一个技巧或解决方法(我显然可以编写完整的查询,但更喜欢使用fluent builder).

推荐答案

好的,经过一些实验,我想出了一个解决方案:

$property = 
    Property::select(
        DB::raw("title, lat, lng, ( 
            3959 * acos( 
                cos( radians(  ?  ) ) *
                cos( radians( lat ) ) * 
                cos( radians( lng ) - radians(?) ) + 
                sin( radians(  ?  ) ) *
                sin( radians( lat ) ) 
            )
       ) AS distance")
    )
    ->having("distance", "<", "?")
    ->orderBy("distance")
    ->take(20)
    ->setBindings([$lat, $lng, $lat,  $radius])
    ->get();

基本上,查询时必须调用setBindings.希望这是有记录的!

Mysql相关问答推荐

默认情况下,MariaDB是否限制为本地主机?

子查询是否可以按主查询中的列进行分组?

Mysql:使用like Select 查询

获取最大登录应用程序用户数以及何时

使用不同的 where 列进行子 Select

将类图转换为SQL数据库

Golang中使用Gorm的Where条件转义字符无法正常工作的问题

按优先级 for each 具有 status_id 的员工 Select 单行

SQL:如何为给定组中的所有记录 Select 一列与另一列不匹配的位置

Mysql 中相同列的相关 2 查询

在 Codeigniter MySQL 中从另一个数据库获取数据

MySQL如何在小时和分钟之间 Select 时间

使用 JOIN 计算列中的所有值

为什么 fetch 方法不能获取任何东西?(feat node.js,restAPI)

mysql - 如何加入表中的动态列

无法在两个 mysql 表上执行内部联接

在 WHERE 子句中使用 CASE

MySQL如何为数据库中的所有表生成DDL

计算执行的查询数

MySQL 1062 - 键 'PRIMARY' 的重复条目 '0'