Heim  >  Artikel  >  Datenbank  >  Wie binde ich Parameter für eloquente Modelle an Rohdatenbankabfragen in Laravel?

Wie binde ich Parameter für eloquente Modelle an Rohdatenbankabfragen in Laravel?

Barbara Streisand
Barbara StreisandOriginal
2024-11-20 14:05:13613Durchsuche

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

Binden von Parametern an Rohdatenbankabfragen in Laravel für eloquente Modelle

Die Verwendung von Rohdatenbankabfragen mit den eloquenten Modellen von Laravel bietet Flexibilität und ermöglicht erweiterte Vorgänge. Das Binden von Parametern an solche Abfragen kann sich jedoch als schwierig erweisen.

In der bereitgestellten Abfrage:

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

Es ist unbedingt zu beachten, dass die Abfrage benannte Platzhalter (? mit Namen verwendet, die mit den gebundenen Parameterschlüsseln übereinstimmen ) innerhalb der DB::raw.

Der Schlüssel zum Binden von Parametern in diesem Szenario liegt in der Verwendung der setBindings-Methode. Diese Methode benötigt ein Array von Werten, die an die Abfrageparameter gebunden werden. Im Beispiel:

  • $lat und $lng sind an das ? gebunden Platzhalter, die Breiten- und Längengrade darstellen.
  • $lat ist wiederum gebunden, um das zweite Positionsargument in der Kosinusfunktion zu berücksichtigen.
  • $radius ist an das ? gebunden. Platzhalter in der Have-Klausel.

Durch den Aufruf von setBindings am Ende der Abfragekette werden die Parameterwerte ordnungsgemäß zugewiesen. Dies behebt den Fehler „Ungültige Parameternummer: gemischte benannte und positionelle Parameter“ und ermöglicht die ordnungsgemäße Ausführung der Rohdatenbankabfrage.

Es ist erwähnenswert, dass diese Lösung nicht explizit dokumentiert ist, was frustrierend sein kann. Wenn Sie jedoch die zugrunde liegenden Mechanismen verstehen und die bereitgestellte Problemumgehung anwenden, können Sie rohe Datenbankabfragen effektiv in den Eloquent-Modellen von Laravel nutzen.

Das obige ist der detaillierte Inhalt vonWie binde ich Parameter für eloquente Modelle an Rohdatenbankabfragen in Laravel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn