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

Doctrine2 PHP Discussion :

Comment faire ma requête?


Sujet :

Doctrine2 PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut Comment faire ma requête?
    Bonsoir j'ai une erreur sur cette requete

    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 botAleatoire()
        {
     
            //SELECT *FROM Protection ORDER BY rand( )LIMIT 1 
            $qb = $this->_em->createQueryBuilder();
            $qb->select('p')
                    ->from('KodAnnuaireBundle:Protection','p')
                    ->orderBy('RAND()')
                    ->setMaxResults(1);
     
            return $qb->getQuery()
                    ->getResult();
        }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    [Syntax Error] line 0, col 58: Error: Expected end of string, got '('
    ma table s'appelle Protection, mon scipt est t'il correcte ?

    je vous remercie d'avance pour la réponse

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Par défaut
    tu peux pas faire ça
    fait direct

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public function botAleatoire()
    {
        //SELECT *FROM Protection ORDER BY rand( )LIMIT 1 
        $qb = $this->_em->createQueryBuilder();
        $qb->createQuery('SELECT p FROM KodAnnuaireBundle:Protection p ORDER BY RAND() LIMIT 1')
     
        return $qb->getResult();
    }

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    Merci beaucoup de ta réponse

    voici mon repository
    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
     
    <?php
     
    namespace Kod\AnnuaireBundle\Entity;
     
    use Doctrine\ORM\EntityRepository;
     
    /**
     * ProtectionRepository
     *
     * This class was generated by the Doctrine ORM. Add your own custom
     * repository methods below.
     */
    class ProtectionRepository extends EntityRepository
    {
     
        public function botAleatoire()
        {
     
        //SELECT *FROM Protection ORDER BY rand( )LIMIT 1 
        $qb = $this->_em->createQueryBuilder();
        $qb->createQuery('SELECT p FROM KodAnnuaireBundle:Protection p ORDER BY RAND() LIMIT 1');
     
        return $qb->getResult();
        }
    }
    j'ai cette erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Fatal error: Call to undefined method Doctrine\ORM\QueryBuilder::createQuery() in /var/www/Sfy2/src/Kod/AnnuaireBundle/Entity/ProtectionRepository.php on line 21
    il faut charger quelque chose ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
        public function loadCaptachaAction()
        {
     
     
        $captcha = $this->getDoctrine()
                               ->getEntityManager()
                               ->getRepository('KodAnnuaireBundle:Protection')
                               ->botAleatoire();
        var_dump($captcha);
     
        }

  4. #4
    Membre éprouvé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 222
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 222
    Par défaut
    j'ai esayé autrement
    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
     
    <?php
    class ProtectionRepository extends EntityRepository
    {
     
    public function botAleatoire()
    {
    $rsm = new ResultSetMapping();
    $sql = 'SELECT url.p,quiz.p FROM KodAnnuaireBundle:Protection p ORDER BY RAND() LIMIT 1';
    $query = $this->_em->createNativeQuery($sql, $rsm);
     
     
        } 
     
    }
    par contre comment je fait pour chopper mon les champs
    j'ai tenter $query->get('url');
    erreur

  5. #5
    Membre expérimenté

    Inscrit en
    Juin 2008
    Messages
    307
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 307
    Par défaut
    Pense à faire des recherches dans google et/ou a consulter la doc de doctrine : http://docs.doctrine-project.org/pro...ative-sql.html

    il faut que tu exécute ta requête pour récupérer le résultat de ta requête (méthode getResult getArrayResult : 2 premiers résultats dans google quand tu mets les mots clef : createNativeQuery doctrine2 ) et la tu pourras accéder au champs de différentes manières (suivant l'hydratation de ton résultat)

  6. #6
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    725
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juin 2011
    Messages : 725
    Par défaut
    idem pour la consultation de la doc doctrine.

    createNativeQuery attend du SQL et non du DQL, "KodAnnuaireBundlerotection" ne semble pas être un nom de table.

    Si tu veux faire une requete SQL sans la mapper à une entité utilise plutot
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $this->_em->getConnection()

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

Discussions similaires

  1. Comment faire une requête Mysql
    Par Xavier dans le forum C++Builder
    Réponses: 5
    Dernier message: 01/02/2007, 17h07
  2. [BDE] Comment faire une requête sur 2 Ttables ?
    Par dim07 dans le forum Bases de données
    Réponses: 2
    Dernier message: 02/12/2006, 12h15
  3. Comment faire ma requête SELECT ?
    Par MaTHieU_ dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 07/07/2006, 16h23
  4. [SQL] Comment faire ma requête
    Par kaiserazo dans le forum Langage SQL
    Réponses: 3
    Dernier message: 30/05/2005, 10h39

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