Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengikat Parameter dengan Betul dalam Pertanyaan Mentah Kompleks dalam Laravel?

Bagaimana untuk Mengikat Parameter dengan Betul dalam Pertanyaan Mentah Kompleks dalam Laravel?

Susan Sarandon
Lepaskan: 2024-11-28 03:08:14
asal
985 orang telah melayarinya

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

Menyoal dengan Binding: Penyelesaian Praktikal dalam Laravel

Apabila bekerja dengan pertanyaan pangkalan data mentah yang kompleks dalam Laravel, parameter pengikatan adalah penting untuk mengelakkan ralat. Keadaan ini sering timbul apabila menggunakan pendekatan berasaskan model.

Pertimbangkan pertanyaan berikut yang dihadapi oleh pengguna:

$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();
Salin selepas log masuk

Pertanyaan ini cuba menapis sifat berdasarkan jaraknya dari titik tertentu menggunakan pengiraan SQL mentah. Walau bagaimanapun, ralat berlaku kerana parameter nama dan kedudukan bercampur.

Untuk menyelesaikan isu ini, seseorang harus memanfaatkan kaedah setBindings, yang membolehkan untuk menentukan pengikatan pertanyaan secara eksplisit. Berikut ialah kod yang diubah suai dan berfungsi:

$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();
Salin selepas log masuk

Dengan menggunakan ruang letak kedudukan (?) dalam SQL mentah dan menggunakan setBindings dengan tatasusunan nilai yang sesuai, pertanyaan dilaksanakan dengan betul, mengikat parameter kepada ruang letak yang sesuai .

Atas ialah kandungan terperinci Bagaimana untuk Mengikat Parameter dengan Betul dalam Pertanyaan Mentah Kompleks dalam Laravel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan