Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Mengikat Parameter dengan betul kepada Pertanyaan Mentah dalam Pembina Fasih Laravel?

Bagaimana untuk Mengikat Parameter dengan betul kepada Pertanyaan Mentah dalam Pembina Fasih Laravel?

DDD
Lepaskan: 2024-11-23 09:00:17
asal
591 orang telah melayarinya

How to Correctly Bind Parameters to Raw Queries in Laravel's Eloquent Builder?

Mengikat Parameter kepada Pertanyaan Mentah dalam Pembina Fasih Laravel

Apabila menggunakan pertanyaan pangkalan data mentah dalam pembina model Eloquent Laravel, ia boleh mencabar untuk mengikat parameter dengan betul. Satu isu biasa timbul apabila cuba menggunakan kedua-dua parameter kedudukan dan nama dalam pertanyaan yang sama.

Pertanyaan yang diberikan dalam soalan menggambarkan isu ini:

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

Setelah pelaksanaan, pertanyaan ini gagal dengan ralat "Nombor parameter tidak sah: nama bercampur dan kedudukan parameter."

Untuk menyelesaikan isu ini, seseorang mesti mengikat parameter secara eksplisit menggunakan kaedah setBindings(). Kaedah ini menerima tatasusunan parameter dalam susunan ia muncul dalam pertanyaan.

Berikut ialah pertanyaan yang diubah suai dengan kaedah setBindings():

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 setBindings() kaedah dengan betul, pertanyaan kini boleh dilaksanakan dengan jayanya, mengikat parameter kepada ruang letak yang sesuai dalam SQL mentah.

Atas ialah kandungan terperinci Bagaimana untuk Mengikat Parameter dengan betul kepada Pertanyaan Mentah dalam Pembina Fasih 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan