createQueryBuilder('f'); $query = $qb ->select('f.titre', 'f.annee') ->where('f.id = :id') ->setParameter('id', $id) ->getQuery(); return $query->getSingleResult(); } public function queryFilmWithGenre(array $genreNames, int $page = 1, array $filters = []) : QueryBuilder { $qb = $this->queryFilter($page, $filters); $qb ->innerJoin('f.genres', 'g') ->addSelect('f'); $qb ->andWhere($qb->expr()->in('g.name', ':genrenames')) ->setParameter('genrenames', $genreNames) ; return $qb; } public function findFilmWithGenre(array $genreNames): array { return $this->queryFilmWithGenre($genreNames) ->getQuery() ->getResult() ; } public function queryFilmWithReal(array $realisateursNames, int $page = 1, array $filters = []): QueryBuilder { $qb = $this->queryFilter($page, $filters); $qb ->leftJoin('f.realisateurs', 'rea') ->addSelect('f') ->andWhere($qb->expr()->in('rea.nomComplet', ':realisateurs')) ->setParameter('realisateurs', $realisateursNames) ; return $qb; } public function findFilmWithReal(array $realisateursNames): array { return $this->queryFilmWithReal($realisateursNames) ->getQuery() ->getResult() ; } public function findFilmWithRealLike($query): array { $qb = $this->createQueryBuilder('f'); $qb ->innerJoin('f.realisateurs', 'r') ->addSelect('f'); $qb ->where($qb->expr()->like('r.nomComplet', ':nomComplet')) ->setParameter('nomComplet', '%'.$query.'%'); return $qb->getQuery()->getResult(); } public function findFilmWithGenreLike($genreName): array { $qb = $this->createQueryBuilder('f'); $qb ->innerJoin('f.genres', 'g') ->addSelect('f'); $qb->where($qb->expr()->like('g.name', ':genreName')) ->setParameter('genreName', '%'.$genreName.'%'); return $qb ->getQuery() ->getResult(); } public function queryFilter(int $page = 1, array $filters = []): QueryBuilder { $qb = $this->createQueryBuilder('f') ->orderBy('f.'.($filters['sortBy'] ?? 'dateSubmited'), $filters['sortOrder'] ?? 'DESC') ; if (!empty($filters['userWantToView'])) { $qb ->leftJoin('f.usersWantToView', 'wan') ->andWhere($qb->expr()->in('wan', ':user')) ->setParameter('user', $filters['userWantToView']) ; } if (!empty($filters['limit'])) { $limit = (int)$filters['limit']; $qb->setFirstResult(($page * $limit) - $limit); $qb->setMaxResults($limit); } if (!empty($filters['note'])) { $qb ->andWhere('f.note >= :note') ->setParameter('note', $filters['note']) ; } if (!empty($filters['username'])) { $qb ->andWhere('f.authered = :authered') ->setParameter('authered', $filters['username']) ; } return $qb; } public function queryTous ($page = 1, array $filters = []): QueryBuilder { $qb = $this->queryFilter($page, $filters) ->leftJoin('f.authered', 'aut')->addSelect('aut') ->leftJoin('f.genres', 'gen')->addSelect('gen') ->leftJoin('f.realisateurs', 'rea')->addSelect('rea') ; return $qb; } public function findProchaines(): array { $date = new \DateTime('now'); $interval = new \DateInterval("P20D"); $interval->invert = 1; $date->add($interval); $qb = $this->createQueryBuilder('f'); $qb ->leftJoin('f.authered', 'aut')->addSelect('aut') ->leftJoin('f.genres', 'gen')->addSelect('gen') ->leftJoin('f.realisateurs', 'rea')->addSelect('rea') ->where('f.dateSortie > :date') ->setParameter('date', $date) ->orderBy('f.dateSortie', 'ASC'); return $qb ->getQuery() ->getResult(); } public function findFilmWithExistentTitre(string $titre): array { return $this->createQueryBuilder('f') ->leftJoin('f.realisateurs', 'r')->addSelect('r') ->where('f.titre = :titre') ->setParameter('titre', $titre) ->getQuery() ->getResult() ; } public function findFilmInImdb(Film $film): array { $reals = []; foreach($film->getRealisateurs() as $real) { $reals[] = $real->getNomComplet(); } $qb = $this->createQueryBuilder('f'); $qb ->andWhere('f.titre = :titre') ->setParameter('titre', $film->getTitre()) ->innerJoin('f.realisateurs', 'rea') ->andWhere($qb->expr()->in('rea.nomComplet', ':reals')) ->setParameter('reals', $reals) ; return $qb ->getQuery() ->getResult() ; } }