Bonjour,
dans mon repository j'ai une fonction pour récupérer des articles et j'aimerais récupérer les commentaires liées sur une période définis par ma requête uniquement.
Donc me retrouver avec une collection de commes définis entre ses deux date.
1
2
3
4
5
6
7
8
9
10
11
12
13
return $this->createQueryBuilder('a') ->select('a') ->leftjoin('a.replies','r') ->addSelect('r') ->where('a.publish BETWEEN :date AND :now OR a.modification BETWEEN :date AND :now ') ->andWhere('a.workspace IN (:follow)') ->andWhere('r.date BETWEEN :date AND :now') ->setParameter('follow', $follow) ->setParameter('date', $dateD) ->setParameter('now', new \DateTime('now')) ->orderBy('a.modification', 'desc') ->getQuery() ->getResult();
la reques sql est juste je pense, mais doctrine me retourn 1 enregistrement.
return $this->createQueryBuilder('a') ->select('a') ->leftJoin('a.replies','r','WITH', 'r.date BETWEEN :date AND CURRENT_DATE()')->set(1, $dateD) ->addSelect('r') ->where('a.publish BETWEEN :date AND :now OR a.modification BETWEEN :date AND :now ') ->andWhere('a.workspace IN (:follow)') //->andWhere('r.date BETWEEN :date AND :now') ->setParameter('follow', $follow) ->setParameter('date', $dateD) ->setParameter('now', new \DateTime('now')) ->orderBy('a.modification', 'desc') ->getQuery() ->getResult();
La fonction fait a peut prés le job. le hic sur les commentaires je n'ai que le premier.
L'utilisation de OR dans une requête sans le moindre parenthésage est souvent lieu à de nombreuse erreurs.
J'ai donc tendance à penser que tu devrais utiliser le query-builder pour faire ton OR afin que tout soit correct.
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php$queryBuilder=$this->createQueryBuilder('a');$queryBuilder->select('a')->leftJoin('a.replies','r','WITH','r.date BETWEEN :date AND CURRENT_DATE()')->set(1,$dateD)->addSelect('r')->where($queryBuilder->expr()->orX($queryBuilder->expr()->between('a.publish',$dateD,new\DateTime('now')),$queryBuilder->expr()->between('a.modification',$dateD,new\DateTime('now'))->andWhere('a.workspace IN (:follow)')->setParameter('follow',$follow)->orderBy('a.modification','desc')->getQuery()->getResult();
Ajoutons que l'utilisation de 'WITH', 'r.date BETWEEN :date AND CURRENT_DATE()' peut être aussi chiante pour la lisibilité par rapport au nombre de andWhere que tu as après.
<?phpreturn$this->createQueryBuilder('a')->select('a')->leftJoin('a.replies','r','WITH','r.date BETWEEN :date AND :now')->addSelect('r')->where('a.publish BETWEEN :date AND :now OR a.modification BETWEEN :date AND :now ')->andWhere('a.workspace IN (:follow)')//->andWhere('r.date BETWEEN :date AND :now')->setParameter('follow',$follow)->setParameter('date',$dateD)->setParameter('now',new\DateTime('now'))->orderBy('a.modification','desc')->getQuery()->getResult();
Tous simplement que current_date donne lieu à de nombreuse erreurs.
J'ai utilisé :now ! Tous va bien. Merci
Connectez-vous pour pouvoir poster un message.
Connexion
Pas encore membre ?
Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte