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