重新,

我有以下疑问:

$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相关问答推荐

是否有一种方法可以在mysql中设置一列,使其自动成为该行的行号的值?

SQL计算不同的列并返回所有行

根据当前表列的值,从SQL中的另一个表中获取数据

为分组记录MySQL取取值为TRUE的单行

MySQL多次联接同一个表使计数变得奇怪

如何将数据导入MySQL中的master/replica struct

是否可以使用以EXPLAIN EXTENDED ...开头的 SQL 语句修改数据?

MySQL函数 - 如何对select查询应用多个条件

SQL查询以查找两个特定行的总和

如何在 Shopware 6 DAL 中实施 Haversine 公式?

java.lang.NullPointerException:无法调用com.proj.my.repository.OrderRepository.save(Object),因为this.orderRepository为空

在表中找到最大值,然后分别显示SQL组和每个SQL组中的最大值计数

添加一个日期字段大于另一个日期字段的要求

Laravel $q->where() 日期之间

如何使主键从 1000 开始?

MySQL:在 Select 语句中自动增加临时列

MySQL 中的 VARCHAR(255) 和 TINYTEXT 字符串类型有什么区别?

考虑到 NodeJS,MySQL 和 MySQL2 有什么区别

我可以在 PHP 中使用 PDO 创建数据库吗?

'LIKE ('%this%' OR '%that%') and something=else' 不起作用