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

 PHP Discussion :

requette simple doctrine


Sujet :

PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Analyse système
    Inscrit en
    Mars 2011
    Messages
    444
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Mars 2011
    Messages : 444
    Par défaut requette simple doctrine
    j'ai 2 module client et facture qui on aucun relation et je veu faire la requette suivent avec doctrine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select * from client,facture
    j'ai mis une reqquette de ce genre mais s'marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     function test(){
           $q = Doctrine_Query::create()
            ->From('Facture,Client');
             return $q->execute();  
       }
    merci

  2. #2
    Membre averti
    Homme Profil pro
    Etudiant - DUT informatique
    Inscrit en
    Mai 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Etudiant - DUT informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 40
    Par défaut
    j'ai 2 module client et facture qui on aucun relation
    Qu'entends tu pas ça ? que tes tables n'ont pas de relations ?

    si elles n'en ont pas :
    Pourquoi veux tu faire un select * from client,facture si les tables ne sont pas liées? (même dans sql ça va te renvoyer tous les enregistrements des clients par enregistrements de factures, soit n clients * m factures = beaucoup)

    si elles sont liées 1-n (un client a n factures et une facture a un client) :
    (je suis que débutant avec symfony)

    dans le tuto jobeet il y a un cas similaire http://www.symfony-project.org/jobee...b_table_method
    essaye un truc comme ça :

    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
    public function test()
    {
      $q = Doctrine_Query::create()
            ->From('Facture');
      $rootAlias = $q->getRootAlias();   
      $q->leftJoin($rootAlias . '.tonAlias a');
      return $q->execute();
    }
     
    // ça fonctionne peu être aussi comme ça :
    public function test()
    {
      $q = Doctrine_Query::create()
         ->From('Facture'); 
         ->leftJoin($q->getRootAlias() . '.tonAlias a');
      return $q->execute();
    }
    ce qui te retourne toutes les factures avec leurs clients (ainsi que les factures sans clients)

    tonAlias correspond dans ton fichier schema.yml à (enfin je crois^^')
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      relations:
        tonAlias: { local: machin_id, foreign: id }

  3. #3
    Expert confirmé
    Avatar de Michel Rotta
    Homme Profil pro
    DPO
    Inscrit en
    Septembre 2005
    Messages
    4 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DPO
    Secteur : Distribution

    Informations forums :
    Inscription : Septembre 2005
    Messages : 4 954
    Par défaut
    Si je suis d'accord sur le fond de la remarque de Mordri, je ne peux cautionner les exemples de code donnée ! Ils font partie du "pourquoi faire simple et rapide alors que l'on peut faire long et compliquer". Pas faux, mais un peu lourd !

    Pour la demande initiale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     function test(){
           $q = Doctrine_Query::create()
            ->from('Facture f')
            ->from('Client c');
             return $q->execute();  
     }
    en plus court :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     function test(){
       return Doctrine_Query::create()->from('Facture f')->from('Client c')->execute();  
     }
    mais le résultat restera tout aussi inutilisable. En ffait, je ne suis même pas sur que doctrine soit capable de le retourner dans un modèle objet viable. Je n'ai jamais essayé. Si cette syntaxe ne marche pas, rien ne marchera.

    En supposant des relations déclarées normalement et que l'on veuille les factures par client, la requête devient alors
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     function test(){
           return Doctrine_Query::create()
            ->from('Client c')
            ->innerJoin('c.factures f')
            ->execute();  
     }
    Plus lisible comme code.

    Maintenant, il va falloir nous en dire plus !

Discussions similaires

  1. [DOCTRINE 2.0] Exemple simple avec code source complet
    Par damien27000 dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 15/02/2012, 09h50
  2. doctrine requette update
    Par benhsaien dans le forum ORM
    Réponses: 3
    Dernier message: 28/06/2011, 12h48
  3. Simple question sur une requette
    Par alexkid999 dans le forum SQL
    Réponses: 2
    Dernier message: 07/11/2007, 08h57
  4. Question rapide sur une requette simple
    Par batoubat dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/06/2006, 18h39
  5. recherche exemple simple pour corba en c++
    Par Pinggui dans le forum CORBA
    Réponses: 4
    Dernier message: 06/05/2002, 11h29

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