Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Mengikat Parameter kepada Pertanyaan Pangkalan Data Mentah dalam Laravel untuk Model Fasih?

Bagaimana untuk Mengikat Parameter kepada Pertanyaan Pangkalan Data Mentah dalam Laravel untuk Model Fasih?

Barbara Streisand
Barbara Streisandasal
2024-11-20 14:05:13610semak imbas

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

Mengikat Parameter kepada Pertanyaan Pangkalan Data Mentah dalam Laravel untuk Model Fasih

Menggunakan pertanyaan pangkalan data mentah dengan model Laravel's Eloquent memberikan fleksibiliti dan membolehkan operasi lanjutan. Walau bagaimanapun, parameter pengikatan kepada pertanyaan sedemikian boleh terbukti mencabar.

Dalam pertanyaan yang disediakan:

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

Adalah penting untuk ambil perhatian bahawa pertanyaan menggunakan ruang letak bernama (? dengan nama yang sepadan dengan kunci parameter terikat ) dalam DB::raw.

Kunci untuk mengikat parameter dalam senario ini terletak pada penggunaan kaedah setBindings. Kaedah ini mengambil tatasusunan nilai untuk diikat pada parameter pertanyaan. Dalam contoh:

  • $lat dan $lng terikat pada ? ruang letak yang mewakili latitud dan longitud.
  • $lat terikat sekali lagi untuk mengambil kira hujah kedudukan kedua dalam fungsi kosinus.
  • $jejari terikat pada ? pemegang tempat dalam klausa yang mempunyai.

Dengan memanggil setBindings pada penghujung rantai pertanyaan, nilai parameter ditetapkan dengan betul. Ini menyelesaikan ralat "Nombor parameter tidak sah: parameter nama bercampur dan parameter kedudukan" dan membenarkan pelaksanaan pertanyaan pangkalan data mentah yang betul.

Perlu diambil perhatian bahawa penyelesaian ini tidak didokumenkan secara eksplisit, yang boleh mengecewakan. Walau bagaimanapun, memahami mekanik asas dan menggunakan penyelesaian yang disediakan membolehkan anda menggunakan pertanyaan pangkalan data mentah dengan berkesan dalam model Eloquent Laravel.

Atas ialah kandungan terperinci Bagaimana untuk Mengikat Parameter kepada Pertanyaan Pangkalan Data Mentah dalam Laravel untuk Model Fasih?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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