首頁 >資料庫 >mysql教程 >如何在 Laravel 中將參數綁定到原始資料庫查詢以獲得 Eloquent 模型?

如何在 Laravel 中將參數綁定到原始資料庫查詢以獲得 Eloquent 模型?

Barbara Streisand
Barbara Streisand原創
2024-11-20 14:05:13680瀏覽

How to Bind Parameters to Raw Database Queries in Laravel for Eloquent Models?

將參數綁定到Laravel 中用於Eloquent 模型的原始資料庫查詢

將原始資料庫查詢與Laravel 的Eloquent 模型結合使用可提供靈活性並允許高級操作。然而,將參數綁定到此類查詢可能具有挑戰性。

在提供的查詢中:

$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();

需要注意的是,查詢使用命名佔位符(? 其名稱與綁定參數鍵匹配) 在 DB::raw 中。

此場景中綁定參數的關鍵在於利用 setBindings 方法。此方法採用要綁定到查詢參數的值數組。在範例中:

  • $lat 和 $lng 結合到 ?代表緯度和經度的佔位符。
  • $lat 再次綁定以說明餘弦函數中的第二個位置參數。
  • $radius 綁定到 ? having 子句中的佔位符。

透過在查詢鏈末尾呼叫 setBindings,可以正確分配參數值。這解決了“無效參數編號:混合命名和位置參數”錯誤,並允許正確執行原始資料庫查詢。

值得注意的是,該解決方案沒有明確記錄,這可能會令人沮喪。然而,了解底層機制並採用提供的解決方法使您能夠在 Laravel 的 Eloquent 模型中有效地利用原始資料庫查詢。

以上是如何在 Laravel 中將參數綁定到原始資料庫查詢以獲得 Eloquent 模型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn