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 :

Fonction Doctrine "not exists" [4.x]


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2019
    Messages : 3
    Par défaut Fonction Doctrine "not exists"
    Bonjour,

    Je tente de récupérer un utilisateur (user Entity) pour lequel aucune action (Action Entity) n'a été enregistrée.
    Pour cela, j'utilise l'expression not exists de Doctrine.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    <?php
    namespace App\Repository;
     
    use App\Entity\User;
    use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
    use Symfony\Bridge\Doctrine\RegistryInterface;
     
    /**
    * @method User|null find($id, $lockMode = null, $lockVersion = null)
    * @method User|null findOneBy(array $criteria, array $orderBy = null)
    * @method User[]    findAll()
    * @method User[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
    */
    class UserRepository extends ServiceEntityRepository
    {
       public function __construct(RegistryInterface $registry)
       {
           parent::__construct($registry, User::class);
       }
     
       /**
        * @return User[] Returns an array of User objects
        */
       public function findByCriteres($reqsearch = null)
       {
           $qb = $this->createQueryBuilder('u');
     
           //Je crée une sous-requête
           $sub = $this->createQueryBuilder('a');
           $sub = $sub->innerJoin('a.actions', 'act');
     
            $qb->andWhere($qb->expr()->not($qb->expr()->exists($sub->getDQL())));
     
            return $qb->getQuery()->getResult();
       }

    En faisant des dump pour visualiser les résultats, j'ai 2 occurrences dans mon entité User :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    array:2 [0 => User {#670 ▶}
      1 => User {#3280 ▶}
    ]
    et 1 seule dans mon entité Action :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    array:1 [0 => User {#3280 ▶}
    ]
    Je devrais donc obtenir comme résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    array:1 [0 => User {#670 ▶}
    ]
    Or je n'obtiens qu'un résultat vide

    En faisant un dump sur mon "getDQL", j'obtiens cette requête qui me semble bonne (je n'ai aucune erreur d'affichée) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     "SELECT u FROM App\Entity\User u WHERE NOT(EXISTS(SELECT z FROM App\Entity\User z INNER JOIN z.actions act))"

    Tout semble bon sauf mon résultat !

    Merci de l'aide que vous pourrez m'apporter.

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2019
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Mars 2019
    Messages : 3
    Par défaut Solution trouvée
    La solution m'a été apporté...
    Il manquait la clause where u.id = z.id dans mon DQL.

    Discussion close

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

Discussions similaires

  1. Fonction Not exists
    Par Pachina75 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/06/2014, 18h11
  2. Existe-t-il une fonction if not define
    Par phoque.r dans le forum Langage
    Réponses: 2
    Dernier message: 12/04/2007, 14h02
  3. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 13h26
  4. Requète avec NOT EXISTS
    Par missllyss dans le forum SQL
    Réponses: 2
    Dernier message: 23/09/2003, 15h20
  5. [JCreator] "package tools does not exists"
    Par snyper147 dans le forum Environnement de Développement Intégré (EDI)
    Réponses: 2
    Dernier message: 04/05/2003, 20h08

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