Maison  >  Article  >  base de données  >  Comment lier des paramètres aux requêtes de base de données brutes dans Laravel pour des modèles éloquents ?

Comment lier des paramètres aux requêtes de base de données brutes dans Laravel pour des modèles éloquents ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-20 14:05:13613parcourir

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

Liaison de paramètres aux requêtes de base de données brutes dans Laravel pour les modèles éloquents

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 :

  • $lat et $lng sont liés au ? des espaces réservés représentant les latitudes et les longitudes.
  • $lat est à nouveau lié pour tenir compte du deuxième argument de position dans la fonction cosinus.
  • $radius est lié au ? espace réservé dans la clause have.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn