首页 > 数据库 > mysql教程 > 如何在 Laravel 中的复杂原始查询中正确绑定参数?

如何在 Laravel 中的复杂原始查询中正确绑定参数?

Susan Sarandon
发布: 2024-11-28 03:08:14
原创
985 人浏览过

How to Properly Bind Parameters in Complex Raw Queries in Laravel?

使用绑定进行查询:Laravel 中的实用解决方案

在 Laravel 中处理复杂的原始数据库查询时,绑定参数对于防止错误至关重要。使用基于模型的方法时经常会出现这种情况。

考虑用户遇到的以下查询:

$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();
登录后复制

此查询尝试根据属性与给定点的距离来过滤属性使用原始 SQL 计算。但是,由于混合命名参数和位置参数,会出现错误。

要解决此问题,应该利用 setBindings 方法,该方法允许显式指定查询的绑定。以下是修改后的工作代码:

$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();
登录后复制

通过在原始 SQL 中使用位置占位符 (?) 并使用适当的值数组调用 setBindings,可以正确执行查询,将参数绑定到适当的占位符.

以上是如何在 Laravel 中的复杂原始查询中正确绑定参数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板