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 :

Utiliser findBy avec limit [2.x]


Sujet :

Symfony PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 137
    Points : 63
    Points
    63
    Par défaut Utiliser findBy avec limit
    Bonjour,

    J'aurais voulu savoir comment faire ma requête avec la condition LIMIT pour la requête SQL. Je sais qu'elle ce trouve dans le findBy, mais comment l'écrire ?

    Ma requête actuel :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public function movieListAction($page) {
            //Connexion à la base
            $em = $this->getDoctrine()->getEntityManager();
            //Création de l'objet et recherche dans la base
            $movieList = $em->getRepository('LimeStudioMoviesBundle:Movies')->findAll();
            //Déclaration de la page de retour
            return $this->render('LimeStudioMoviesBundle:Movie:movieList.html.twig', array(
                    'moviesList' => $movieList,
                    )
            );
        }
    Une aide ?
    Merci

  2. #2
    Membre actif Avatar de hazamor
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2008
    Messages
    179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2008
    Messages : 179
    Points : 206
    Points
    206
    Par défaut
    L'entête de fonction findby est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     public function findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
    Si je reprends votre exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $movieList = $em->getRepository('LimeStudioMoviesBundle:Movies')->findBy(array(), null, $limit, $offset);

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Ok merci, ça marche, sauf qu'il n'est pas possible de gérer les nombres de lignes par page...

    Impossible de rajouter une instruction du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $movieList = $em->getRepository('LimeStudioMoviesBundle:Movies')->findBy(array(), null, $page.', 3', null);
    Il créera le requête avec LIMIT "X", et pas LIMIT "X", 3.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 85
    Points : 62
    Points
    62
    Par défaut
    Salut,

    Je ne sais pas si je comprends bien, mais a priori, le nombre de lignes par page se gère en amont, non?

    pour afficher la page $num_page, on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $movieList = $em->getRepository('LimeStudioMoviesBundle:Movies')->findBy(array(), null, $nb_lignes_par_page*$num_page, $num_page-1);
    Je ne trouve pas de vraie doc Synfony... je me base sur le prototype de la fonction, et j'imagine donc que cela fonctionne comme la clause LIMIT de MySQL...

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Oui, mais quand je mais ces paramètres Symfony ne génère pas la requête : "LIMIT x, x" mais seulement "LIMIT x", il zappe la virgule !

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 85
    Points : 62
    Points
    62
    Par défaut
    tu peux faire voir ton code ?

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    La fonction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     public function movieListAction($page) {
     
            $nbLigne = '3';
     
            //Connexion à la base
            $em = $this->getDoctrine()->getEntityManager();
            //Création de l'objet et recherche dans la base
            $movieList = $em->getRepository('LimeStudioMoviesBundle:Movies')->findBy(array(), null, $page*$nbLigne.', '.$nbLigne, null);
            //Déclaration de la page de retour
            return $this->render('LimeStudioMoviesBundle:Movie:movieList.html.twig', array(
                    'moviesList' => $movieList,
                    )
            );
        }
    La requête généré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT t0.movie_id AS movie_id1, t0.movie_title AS movie_title2, t0.movie_releasedate AS movie_releasedate3, t0.movie_synopsis AS movie_synopsis4, t0.movie_poster AS movie_poster5, t0.movie_file AS movie_file6, t0.movie_slug AS movie_slug7, t0.movie_time AS movie_time8, t0.movie_publishdate AS movie_publishdate9 FROM movies t0 LIMIT 3
    La condition LIMIT n'est pas complète !

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 85
    Points : 62
    Points
    62
    Par défaut
    je n'ai pas testé, mais base toi sur mon code...
    dans le tien, le virgule fait partie de la chaine, c'est normal que sf ne considere pas ce paramètre.
    Ton dernier null correspond à l'offset, il ne doit pas être null chez toi, mais valoir quelque chose comme ($num_page-1)

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 85
    Points : 62
    Points
    62
    Par défaut
    c'est plus quelque chose comme ça même...
    voir la doc de limit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $movieList = $em->getRepository('LimeStudioMoviesBundle:Movies')->findBy(array(), null, $nb_lignes_par_page*$num_page, ($num_page-1)*$nb_lignes_par_page);

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Ton code marche pas n'ont plus..., la requête reste la même

    Pour l'offset, il me sert a rien pour cette requête.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 85
    Points : 62
    Points
    62
    Par défaut
    comment ça l'offset ne te sert à rien?
    J'ai rien compris à ce que tu souhaites faire, alors ^^

    Qu'est-ce que tu souhaites faire quand tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $movieList = $em->getRepository('LimeStudioMoviesBundle:Movies')->findBy(array(), null, $page.', 3', null);
    C'est de moins en moins clair...

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    A quoi sert l'offset alors ? .

    Je veux un affichage par page avec 3 ligne par page, j'ai que 10 lignes dans la tables pour l'instant, seul l'instruction LIMIT me sert, du genre "LIMIT 0, 3" "LIMIT 3, 3" "LIMIT 6, 3" ect...

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    85
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 85
    Points : 62
    Points
    62
    Par défaut
    [edit]je suis fatigué... j'ai ecrit de la daube :/ je rectifie:[/edit]
    il n'empeche qu'il faut que tu précise les 2 derniers params au findBy, ce que tu ne fais pas lorsque tu ecris
    $page.', 3', null
    il faut faire, amha
    (page-1)*3, 3
    dans ton cas...
    ou
    3, (page-1)*3
    je ne sais pas bien...

    dans la doc MySQL, on a bien:
    SELECT [STRAIGHT_JOIN]
    [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
    [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] [HIGH_PRIORITY]
    [DISTINCT | DISTINCTROW | ALL]
    select_expression,...
    [INTO {OUTFILE | DUMPFILE} 'nom_fichier' export_options]
    [FROM table_references
    [WHERE where_definition]
    [GROUP BY {unsigned_integer | nom_de_colonne | formula} [ASC | DESC], ...
    [HAVING where_definition]
    [ORDER BY {unsigned_integer | nom_de_colonne | formula} [ASC | DESC] ,...]
    [LIMIT [offset,] lignes]
    [PROCEDURE procedure_name(argument_list)]
    [FOR UPDATE | LOCK IN SHARE MODE]]

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 137
    Points : 63
    Points
    63
    Par défaut
    Ok d'accord, c'est bon, ma fonction était à l’envers ! (Ils pourraient faire plus simple ^^)

    Merci pour l'aide tardive .

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

Discussions similaires

  1. [DB2]requete avec 'LIMIT' ?!
    Par beastman007 dans le forum DB2
    Réponses: 13
    Dernier message: 29/01/2007, 10h50
  2. [Kylix 3] Je n'arrive pas à utiliser MySQL
    Par usebob dans le forum EDI
    Réponses: 4
    Dernier message: 15/04/2005, 10h18
  3. Réponses: 6
    Dernier message: 24/02/2005, 09h44
  4. PB de vue utilisant UNION avec ENTERPRISE MANAGER
    Par punglas dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 22/12/2004, 15h18
  5. Réponses: 12
    Dernier message: 02/02/2004, 13h41

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