IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

postgresql et doctrine, requete un peu spéciale


Sujet :

Symfony PHP

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut postgresql et doctrine, requete un peu spéciale
    Bonjour,

    J'utilise symfony avec postgresql et j'aimerais executer une requete un peu spéciale (qui fonctionne avec un cartridge pour postgresql qui s'appelle bingo et qui permet de faire de la recherche structurale de molécule, mais je dirais peu importe).
    De ce fait, la syntaxe d'une requete est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from molecule where structure @ ('query', 'parameters')::bingo.exact
    Quand j'utilise cela, doctrine plante à cause de la présence des "@" et autres "::" dans la requete.
    J'ai essayé la fonction NativeSql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $rsm = new ResultSetMapping;
    $rsm->addEntityResult('molecule', 'm');
    $rsm->addFieldResult('m', 'id', 'id');
     
    $query = $this->_em->createNativeQuery('SELECT id FROM molecule WHERE structure @ (?, ?)::bingo:exact', $rsm);
    $query->setParameter(1, $query);
    $query->setParameter(2, $parameters);
    return $query->getResult();
    mais j'ai une erreur :
    Object of class Doctrine\ORM\NativeQuery could not be converted to string in /home/.../Symfony/vendor/doctrine-dbal/lib/Doctrine/DBAL/Statement.php line 98
    Si quelqu'un a une idée, je suis preneur.
    Merci d'avance pour votre aide.

  2. #2
    Membre éprouvé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Points : 1 050
    Points
    1 050
    Par défaut
    Bonjour
    peut être un problème d'échappement par rapport au "joker" des requêtes préparées, as tu essayé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $query = $this->_em->createNativeQuery('SELECT id FROM molecule WHERE structure @ (?, ?)\:\:bingo\:exact', $rsm);
    Si tu veux récupérer uniquement les id il sera plus simple d'utiliser Doctrine\DBAL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $connexion=$this->_em->getConnection();/*@var $connexion Doctrine\DBAL\Connection*/
    $connexion->query($sql);//execute une requete (mais pas une requete préparé)
    Bon courage

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 7
    Points : 6
    Points
    6
    Par défaut
    Merci pour ton aide, je m'en suis sorti avec la seconde solution.

    Dans le même genre, je souhaite faire une requete (préparée ce coup ci) en triant selon un champ texte qui contient potentiellement des nombres.
    Lorsque je fais ma requete, j'obtient un classement alphabétique du genre
    10
    100
    1000
    20

    au lieu de
    10
    20
    100
    1000

    Je suis sous postgresql et pour obtenir le bon résultat, il faut executer la requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select champ from table order by champ::integer
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select CAST(champ AS int4) champ_ord from table order by champ_ord
    Or, dans les deux cas, doctrine n'accepte pas ces requêtes.
    Je sais qu'il est possible de définir des fonctions dans doctrine mais ça me paraît bien compliqué pour faire quelque chose de simple...
    Si quelqu'un à la solution ...
    Merci d'avance !

Discussions similaires

  1. Réponses: 8
    Dernier message: 22/06/2009, 18h06
  2. envois de var $_GET un peu spécial
    Par frechy dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 24/11/2004, 11h00
  3. Requete un peu complexe avec la fonction IN
    Par Taichin dans le forum Oracle
    Réponses: 27
    Dernier message: 10/11/2004, 08h59
  4. Réponses: 4
    Dernier message: 05/07/2004, 13h17
  5. ORDER BY un peu spécial
    Par gromez dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 29/04/2004, 11h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo