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