Heim >Datenbank >MySQL-Tutorial >Wie binde ich Parameter korrekt an Rohabfragen im Eloquent Builder von Laravel?
Binden von Parametern an Rohabfragen im Eloquent Builder von Laravel
Die Verwendung einer Rohdatenbankabfrage im Eloquent Model Builder von Laravel kann schwierig sein Parameter korrekt binden. Ein häufiges Problem tritt auf, wenn versucht wird, sowohl Positions- als auch benannte Parameter innerhalb derselben Abfrage zu verwenden.
Die in der Frage bereitgestellte Abfrage veranschaulicht dieses Problem:
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();
Bei der Ausführung schlägt diese Abfrage mit fehl der Fehler „Ungültige Parameternummer: gemischte benannte und positionelle Parameter.“
Um dieses Problem zu beheben, müssen die Parameter explizit gebunden werden mit der setBindings()-Methode. Diese Methode akzeptiert ein Array der Parameter in der Reihenfolge, in der sie in der Abfrage erscheinen.
Hier ist die geänderte Abfrage mit der setBindings()-Methode:
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();
Durch Verwendung von setBindings() Wenn Sie die Methode korrekt ausführen, kann die Abfrage nun erfolgreich ausgeführt werden, wobei die Parameter an die entsprechenden Platzhalter im Roh-SQL gebunden werden.
Das obige ist der detaillierte Inhalt vonWie binde ich Parameter korrekt an Rohabfragen im Eloquent Builder von Laravel?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!