Partage
  • Partager sur Facebook
  • Partager sur Twitter

traduction sql en dql

symfony 4

    4 septembre 2020 à 16:01:08

    Bonjour a tous,

    je suis bloqué plusieurs jours sur cette requete sql que je voudrais traduire en dql symfony mais je me plante.

    Je ne sais que faire, svp orientez-moi.

    merci!

    SELECT c.id,c.nom,c.prenom,c.date_naissance,c.mere,c.created_at
    
                    FROM personnel c
    
                    INNER JOIN (
    
                        SELECT nom,prenom,date_naissance, mere,MAX(created_at) AS dernier
    
                        FROM personnel
    
                        WHERE nom ='nom_utilisateur'
    
                        GROUP BY prenom, nom, date_naissance, mere
    
                    ) t
    
                    ON t.nom = c.nom
    
                    AND t.prenom = c.prenom
    
                    AND t.date_naissance = c.date_naissance
    
                    AND t.mere = c.mere
    
                    AND t.dernier = c.created_at
    
                    ORDER BY c.nom ;



    -
    Edité par JAVA CHILD 2 décembre 2020 à 9:22:23

    • Partager sur Facebook
    • Partager sur Twitter
    JAVA CHILD
      4 septembre 2020 à 16:03:01

      Bonjour,

      Majuscules abusives

      L'écriture en majuscules est considérée comme une parole criée et diminue autant la lisibilité du texte que sa compréhension. Les majuscules abusives sont donc interdites aussi bien dans les titres que dans les messages.

      • Partager sur Facebook
      • Partager sur Twitter

      Pas d'aide concernant le code par MP, le forum est là pour ça :)

        4 septembre 2020 à 16:51:05

        la requête interne ne se suffit-elle pas à elle même ?

        SELECT id,nom,prenom,date_naissance, mere,MAX(created_at) AS dernier
              FROM personnel
              WHERE nom ='nom_utilisateur'
              GROUP BY prenom, nom, date_naissance, mere
              ORDER BY nom
        • Partager sur Facebook
        • Partager sur Twitter
          5 septembre 2020 à 12:02:58

          Merci umfred,

          J'essaye et je vous reviens.

          • Partager sur Facebook
          • Partager sur Twitter
          JAVA CHILD
            12 septembre 2020 à 10:50:31

            Je reviens après essai de votre methode,

            selon ce que je propose comme code:

            public function searchng($nom)
                {
                    $em=  $this->getEntityManager();
                    $query = $em->createQuery("
                                SELECT nom,prenom,date_naissance, mere,MAX(created_at) AS dernier
                                FROM App\Entity\CasierJudiciaire 
                                WHERE nom = :name
                                GROUP BY prenom, nom, date_naissance, mere
                            ORDER BY nom ; 
                    ")
                    ->setParameter('name', $nom)
                    ;
                    return $query->getResult();

            Voici mon controlleur:

            /**
                 * @Route("/search", name="casier_judiciaire_search", methods="POST")
                 */
                public function search(Request $request,CasierJudiciaireRepository $casierJudiciaireRepository): Response
                {
                    $casiers = $casierJudiciaireRepository->searchng(
                        $request->get('nom')
                    );
                        return $this->render('casier_judiciaire/search_result.html.twig', [
                            'casiers' => $casiers,
                        ]);
                }



            J'ai cette erreur:

            [Syntax Error] line 0, col 167: Error: Expected end of string, got 'nom'nom'

            -
            Edité par JAVA CHILD 12 septembre 2020 à 10:59:00

            • Partager sur Facebook
            • Partager sur Twitter
            JAVA CHILD
              14 septembre 2020 à 12:02:05

              la virgule après 'casiers=>$casiers me semble inutile

              il manquerait le type de sortie de la fonction searhng(..) ==> publicfunctionsearchng($nom):array

              A quel endroit on t'indique l'erreur (ligne 0 c'est étrange) ?

              Si tu remplaces $request->get('nom') par une valeur existante de nom présente dans ta base, tu as encore l'erreur ?

              • Partager sur Facebook
              • Partager sur Twitter
                14 septembre 2020 à 12:36:21

                Mon message plus haut n'était pas là pour faire joli, merci d'en tenir compte.
                • Partager sur Facebook
                • Partager sur Twitter

                Pas d'aide concernant le code par MP, le forum est là pour ça :)

                  27 novembre 2020 à 15:41:15

                  Excuse moi pour mon absence de longue période,

                  et Merci à tous pour vos différentes solutions 

                  J'ai pris soin d'exploiter a fond les solutions de chacun de vous,

                  mais je plante avec le même message.

                  [Syntax Error] line 0, col 166: Error: Expected end of string, got 'nom'

                  Merci de me venir en aide !

                  Cordialement !

                  • Partager sur Facebook
                  • Partager sur Twitter
                  JAVA CHILD
                    27 novembre 2020 à 15:55:15

                    retire le ORDER BY nom pour voir, dans un 1er temps
                    • Partager sur Facebook
                    • Partager sur Twitter
                      27 novembre 2020 à 16:01:05

                      Mon message plus haut n'était pas là pour faire joli, merci d'en tenir compte.
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Pas d'aide concernant le code par MP, le forum est là pour ça :)

                        27 novembre 2020 à 16:36:01

                        Lamecarlate a écrit:

                        Mon message plus haut n'était pas là pour faire joli, merci d'en tenir compte.


                        il est très courant (pour ne pas dire que c'est l'usage) en SQL de mettre les instructions en majuscules, ce n'est pas du "cri" ou autres, c'est juste la pratique qui veut ça (voir la partie Base de données du forum)
                        • Partager sur Facebook
                        • Partager sur Twitter
                          27 novembre 2020 à 16:38:47

                          C'est vrai, mais mon message concerne aussi le titre, et deux des quatre mots qui le composent ne sont pas des instructions SQL ;)

                          (j'avoue que mon dernier rappel pouvait prêter à confusion, j'ai bêtement copié-collé)

                          • Partager sur Facebook
                          • Partager sur Twitter

                          Pas d'aide concernant le code par MP, le forum est là pour ça :)

                            29 novembre 2020 à 17:40:52

                            Merci beaucoup umfred de te pencher sur mon cas,

                            j'ai pris soin de prendre les moindre détails de votre recommandation

                            mais toujours au même niveau.

                            mon repository

                            public function search($nomp)
                                {
                                    $em=  $this->getEntityManager();
                                    $query = $em->createQuery("
                                                select nom,prenom,date_naissance, mere,MAX(created_at) AS dernier
                                                from App\Entity\CasierJudiciaire
                                                where nom = :nom
                                                group by prenom, nom, date_naissance, mere;
                                    ")
                                    ->setParameter('nom', $nomp)
                                    ;
                                    return $query->getResult();
                            }

                            mon controleur

                            public function search(Request $request,CasierJudiciaireRepository $casierJudiciaireRepository): Response
                                {
                                    $casiers = $casierJudiciaireRepository->search(
                                        $request->get('nom')
                                    );
                                        return $this->render('casier_judiciaire/search_result.html.twig', [
                                            'casiers' => $casiers,
                                        ]);
                                }

                            ma vue

                            <thead>
                                    <tr style="background-color: #ecc24f; color: green;">
                                        <th>Nom</th>
                                        <th>Prenom</th>
                                        <th>Sexe</th>
                                        <th>Date naissance</th>
                                        <th>Lieu naissance</th>
                                        <th>Nationalité</th>
                                        <th>actions</th>
                                    </tr>
                                </thead>
                                <tbody>
                                {% for casier in casiers %}
                                    <tr {% if casier.ligneCasiers|length > 0 %} style="color: red;" {% endif %}>
                                        <td>{{ casier.nom }}</td>
                                        <td>{{ casier.prenom }}</td>
                                        <td>{{ casier.sexe }}</td>
                                        <td>{{ casier.dateNaissance ? casier.dateNaissance|date('d/m/Y') : '' }}</td>
                                        <td>{{ casier.lieuNaissance }}</td>
                                        <td>{{ casier.nationalite }}</td>
                                        <td>
                                            <a class="btn-xs btn-warning" href="{{ path('casier_judiciaire_dupliquer', {'id': casier.id }) }}">Dupliquer</a> |
                                            <a class="btn-xs btn-warning" href="{{ path('casier_judiciaire_show', {'id': casier.id}) }}">{{ casier.ligneCasiers|length }} ligne(s)</a>
                                        </td>
                                    </tr>
                                {% else %}
                                    <tr>
                                        <td colspan="8" style="text-align: center;">AUCUN ENREGISTREMENT TROUVE!</td>
                                    </tr>
                                {% endfor %}
                                </tbody>

                            merci pour votre aide !

                            cordialement !



                            • Partager sur Facebook
                            • Partager sur Twitter
                            JAVA CHILD
                              30 novembre 2020 à 12:16:07

                              le même message exactement ou un autre numéro de colonne ? [Syntax Error] line 0, col 166: Error: Expected end of string, got 'nom'
                              la requête SQL fonctionne bien quand elle est exécuté dans mysql ? 
                              (Pense à corriger ton titre en le mettant en minuscule pour répondre à la demande du modérateur; en éditant ton 1er message)
                              • Partager sur Facebook
                              • Partager sur Twitter
                                2 décembre 2020 à 9:17:05

                                merci umfred de te pencher sur mon cas,

                                oui toujours le même message d'erreur [Syntax Error] line 0, col 166: Error: Expected end of string, got 'nom'

                                chose étonnante la requête passe sans problème dans mysql

                                merci !


                                • Partager sur Facebook
                                • Partager sur Twitter
                                JAVA CHILD
                                  2 décembre 2020 à 10:05:38

                                  change peut-être le nom du paramètre dans la requête

                                  [...] where nom = :vnom [...] ->setparameter('vnom',$nom) [...]



                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    2 décembre 2020 à 13:27:05

                                    J'ai changé comme indiqué ci-haut mais toujours le même message d'erreur [Syntax Error] line 0, col 166: Error: Expected end of string, got 'nom' J'en ai vraiment besoin, aussi n'y aurait-il pas une autre solution? merci de bien m'aider !
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                    JAVA CHILD
                                      2 décembre 2020 à 16:50:02

                                      Bonjour,

                                      Question bête mais dans ton entité y a-t-il vraiment une propriété nom?

                                      Si tu fais un var_dump de $_POST ou $_GET qu'est-ce que ca t'affiche ?

                                      Et dans le détail de la page débug, ca ne t'affiche pas la fonction dans laquelle le problème apparait ?

                                      EDIt : si tu supprime ton ; à la fin de ta requête ca fait quoi? Car il n'y en a pas dans la documentation

                                      -
                                      Edité par lindadu01 2 décembre 2020 à 16:53:55

                                      • Partager sur Facebook
                                      • Partager sur Twitter

                                      Parfois, arrêter 5 minutes son développement permet de mieux repartir face à un problème ;)

                                      traduction sql en dql

                                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                      • Editeur
                                      • Markdown