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

Doctrine2 PHP Discussion :

Concat et caractere '_' avec queryBuilder, Symfony2


Sujet :

Doctrine2 PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 33
    Par défaut Concat et caractere '_' avec queryBuilder, Symfony2
    je ne savais pas vraiment quoi mettre comme titre à mon problème...

    je suis en train de constituer une requête et j'ai quelques soucis...
    Ci dessous la condition de ma requête qui pose soucis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $queryBuilder-> andWhere($queryBuilder->expr()->eq(
        $queryBuilder->expr()->concat('p.metadonnee', 
            $queryBuilder->expr()->concat($separateur, 'p.value')
        ),
        $_POST[$POSTMDID].$separateur.$_POST[$ENTRY]
    ));
    et ci dessous l'erreur générée par Symfony2
    An exception has been thrown during the rendering of a template ("[Syntax Error] line 0, col 220: Error: Expected '.' or '(', got '_'")
    et ma requete générée...
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT d, td, m 
    FROM 
        Vetoquinol\WeaselBundle\Entity\Document d INNER JOIN d.typesdocuments td INNER JOIN td.metadonnees m INNER JOIN m.properties p 
    WHERE 
        td.id IN(1) AND p.document = d.id AND CONCAT(p.metadonnee, CONCAT(_, p.value)) = 1_5113 
    ORDER BY d.id, m.id ASC
    je ne comprend pas ... qu'est-ce que je fais mal ?? je précise que je suis toute nouvelle sur Symfony2

  2. #2
    Membre éclairé Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 320
    Par défaut
    Salut,

    La condition 1_513 dans ta requête sql cela devrait être quoi ? numérique ou alpha? Parce que la il faudrait des guillemets (1_513 ne peut pas être considéré comme numérique).

    Dans ton queryBuilder tu dois gérer ce pb.

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 33
    Par défaut
    je viens d'essayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $queryBuilder-> andWhere($queryBuilder->expr()->eq(
    										$queryBuilder->expr()->concat('p.metadonnee', 
    																	$queryBuilder->expr()->concat($separateur, 'p.value')),"'".$_POST[$POSTMDID].$separateur.$_POST[$ENTRY]."'"));
    et j'en suis toujours au même point

    ci dessous la requete générée...
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT d, td, m FROM Vetoquinol\WeaselBundle\Entity\Document d INNER JOIN d.typesdocuments td INNER JOIN td.metadonnees m INNER JOIN m.properties p WHERE td.id IN(1) AND p.document = d.id AND CONCAT(p.metadonnee, CONCAT(_, p.value)) = '1_5113' ORDER BY d.id, m.id ASC


    j'ai encore essayé autre chose :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $queryBuilder-> andWhere($queryBuilder->expr()->eq(
    										$queryBuilder->expr()->concat('p.metadonnee', 
    																	$queryBuilder->expr()->concat($separateur, 'p.value')),"'".$_POST[$POSTMDID].$separateur.$_POST[$ENTRY]."'"));
    et ça ne passe toujours pas bien que ma requête ait l'air OK...
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT d, td, m FROM Vetoquinol\WeaselBundle\Entity\Document d INNER JOIN d.typesdocuments td INNER JOIN td.metadonnees m INNER JOIN m.properties p WHERE td.id IN(1) AND p.document = d.id AND CONCAT(p.metadonnee, CONCAT('_', p.value)) = '1'_'5113' ORDER BY d.id, m.id ASC

  4. #4
    Membre averti
    Femme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 33
    Par défaut
    je continue dans mes recherches...
    et cette fois, j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $queryBuilder-> andWhere($queryBuilder->expr()->like(
        $queryBuilder->expr()->concat(
            'p.metadonnee', 
    	$queryBuilder->expr()->concat(
                $queryBuilder->expr()->literal('_'), 'p.value')),
                $queryBuilder->expr()->literal('1_5114')));
    cette fois je pense que c'est mieux qu'avant mais toujours une erreur

    [Semantical Error] line 0, col 204 near 'metadonnee, CONCAT('_',': Error: Invalid PathExpression. Must be a StateFieldPathExpression.
    Au niveau de la requête générée ça donne ça :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT d, td, m, p 
    FROM Vetoquinol\WeaselBundle\Entity\Document d 
        INNER JOIN d.typesdocuments td INNER JOIN td.metadonnees m 
        INNER JOIN m.properties p 
    WHERE td.id IN(1) AND p.document = d.id AND CONCAT(p.metadonnee, CONCAT('_', p.value)) LIKE '1_5114' 
    ORDER BY d.id, m.id ASC

  5. #5
    Membre éclairé Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 320
    Par défaut
    Salut,

    Donc on considère que le "1_513" est bien une chaine de caractère. Du coup le LIKE est bien.

    La fonction concat en SQL est plutot :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CONCAT('laValeur','LeSeparateur')
    exemple : 
    SELECT (CONCAT(CONCAT(m.nom, ' '), m.prenom)) ..
    Dans ta requête générée, c'est le contraire....

  6. #6
    Membre éclairé Avatar de FadeToBlack
    Homme Profil pro
    ...
    Inscrit en
    Août 2010
    Messages
    320
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : ...
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Août 2010
    Messages : 320
    Par défaut
    En fait, je me suis galéré pendant plusieurs heures pour essayer de résoudre un problème comme le tient en passant par le querybuilder.

    Et puis j'ai utilisé le createQuery et cela fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    dans le repository
    $req = $this->_em->createQuery("SELECT TRIM(concat(concat(i.nom,' '), i.prenom)) as name from MonBundle:entity i where i.sexe = 'M' order By name ASC");
    $result = $req->getResult();
    et du coup cela fonctionne.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme caracteres accentués avec le Clipboard
    Par willoi dans le forum SWT/JFace
    Réponses: 4
    Dernier message: 08/02/2008, 14h18
  2. [CONCAT]concaténer une valeur avec résultat d'un SELECT
    Par Mat_DZ dans le forum Langage SQL
    Réponses: 1
    Dernier message: 14/01/2008, 12h27
  3. Réponses: 4
    Dernier message: 02/01/2008, 15h11
  4. generer des caracteres accentues avec javascript
    Par aleroux dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 25/01/2006, 15h03
  5. Pb caractere unicode avec forms9i..
    Par ffffffffx0 dans le forum Oracle
    Réponses: 8
    Dernier message: 28/04/2004, 13h24

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