2010-06-01 5 views
1

cette clause SQL fonctionne OK:Doctrine: comment créer une requête en utilisant "LIKE REPLACE"?

SELECT * FROM `sf_guard_user` WHERE nombre_apellidos LIKE REPLACE('Mar Sanz',' ','%') 

Maintenant, je suis en train d'écrire cette requête pour Doctrine. Je l'ai essayé:

$query->andWhere(sprintf('%s.%s LIKE REPLACE (?," ","%")', 
         $query->getRootAlias(), $fieldName), 
       'Mar Sanz')); 

mais je reçois cette erreur:

Warning: sprintf() [function.sprintf]: Too few arguments 

Toute idée?

Cordialement

Javi

Répondre

3

A doit être doublé '%' ('%%') pour signifier un% littéral à l'intérieur d'une chaîne de modèle que vous avez envoyé à sprintf ou printf:

$query->andWhere(sprintf('%s.%s LIKE REPLACE (?," ","%%")', 
         $query->getRootAlias(), $fieldName), 
       'Mar Sanz')); 

Suggestion: Pourquoi ne pas exécuter la fonction de remplacement de chaîne dans le code avant de l'envoyer au serveur de base de données?

$query->andWhere(
    sprintf(
     '%s.%s LIKE ?', 
     $query->getRootAlias(), 
     $fieldName 
    ), 
    preg_replace('/ /', '%', 'Mar Sanz') 
); 
+0

Merci! Votre suggestion a-t-elle un avantage? – ziiweb

Questions connexes