L'utilisation de requêtes de base de données brutes avec les modèles éloquents de Laravel offre une flexibilité et permet des opérations avancées. Cependant, lier des paramètres à de telles requêtes peut s'avérer difficile.
Dans la requête fournie :
$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();
Il est essentiel de noter que la requête utilise des espaces réservés nommés (? avec des noms correspondant aux clés de paramètre liées ) dans DB::raw.
La clé pour lier les paramètres dans ce scénario réside dans l'utilisation de la méthode setBindings. Cette méthode prend un tableau de valeurs à lier aux paramètres de requête. Dans l'exemple :
En appelant setBindings à la fin de la chaîne de requête, les valeurs des paramètres sont correctement attribuées. Cela résout l'erreur « Numéro de paramètre invalide : paramètres nommés et positionnels mixtes » et permet une exécution correcte de la requête de base de données brute.
Il convient de noter que cette solution n'est pas documentée explicitement, ce qui peut être frustrant. Cependant, comprendre les mécanismes sous-jacents et utiliser la solution de contournement fournie vous permet d'utiliser efficacement les requêtes de base de données brutes dans les modèles Eloquent de Laravel.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!