如何在 Laravel 中的複雜原始查詢中正確綁定參數?

Susan Sarandon
發布: 2024-11-28 03:08:14
原創
954 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板