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

Zend_Db PHP Discussion :

Compatibilité entre modèle objet Zf et les jointures


Sujet :

Zend_Db PHP

  1. #1
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 184
    Points : 56
    Points
    56
    Par défaut Compatibilité entre modèle objet Zf et les jointures
    Bonjour à tous,


    J'ai deux tables :

    • user_info : la table des utilisateurs (email, password...)
    • user_profile : la table profil des utilisateurs (nom, prénom)


    user_info et user_profile sont reliées entres elles par le champ user_id commun au deux.

    J'essaie d'utiliser au maximum les concepts fournis par Zf.
    Par exemple, pour la table user_info, j'ai :

    • class UserInfo() : qui représente un enregistrement particulier (c'est l'endroit ou je mets les getters/ setters)
    • class UserInfoMapper() : qui me permet d'effectuer des opérations sur cette table (par exemple enregistrer un objet avec la méthode save, ou hydrater à partir d'un Zend_Db_Row, un objet UserInfo)
    • class DbTable_UserInfo() : qui représente la table (me permet de déclarer la PK etc...)


    J'utilise typiquement ces objets comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $user_info_map = new UserInfoMapper();
    $user_info = $user_info_map->find(1);
    
    // $user_info sera une instance de UserInfo() et non pas un Zend_Db_Row

    Et je voudrais par exemple à partir de user_info récupérer le profil.
    En SQL ça donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT *
    FROM user_info
    JOIN user_profile
    ON user_info.user_id = user_profile.user_id
    En une requête j'aurais ma liste d'enregistrement.


    Maintenant, si je passe par Zend_Db_Relationships et que je déclare les références dans ma DbTable_UserProfile.

    Pour avoir les profils je ferais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $ui = new DbTable_UserInfo();
    $rowset = $ui->find(1);
    $row = $rowset->current();
     
    $profiles = $row->findDependentRowset('DbTable_UserProfile', 'UserInfo');
    $profile = $profiles->current();
    Mon problème est que Zf ne fait pas de jointure SQL mais fait 2 selects.

    Donc pour 3 utilisateurs, j'aurais :
    • Un select * from user_info
    • 3 select * from user_profile


    Pour n utilisateurs, j'aurais : 1 + n requêtes. Alors que j'aurais pu faire 1 requête.

    C'est sur que pour 3 utilisateurs avec deux table liées, ça semble dérisoire mais sur 4 tables liées, ça monte à : 1 + 4n

    Et perso, pour 20 lignes, faire 81 requêtes, c'est chaud :O


    Est-ce possible de faire moins ?


    Merci beaucoup.
    Cdt.

  2. #2
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Oui tu peux utiliser join ou joinLeft joinNatural joinRight

  3. #3
    Membre du Club
    Inscrit en
    Juin 2005
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : Juin 2005
    Messages : 184
    Points : 56
    Points
    56
    Par défaut
    Ça s'apparente au full loading ?

    http://baptiste-wicht.developpez.com.../full-loading/

  4. #4
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Pas bligatoirement tu peux faire comme tu veux mais regarde la documentation officiel

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Cette discussion est une démonstration supplémentaire qu'il est bien plus pratique d'utiliser des requêtes en SQL natif que le pseudo SQL des ORM !

    Ne vous embêtez pas avec ce truc inutilement compliqué !
    Écrivez les requêtes en SQL natif et soumettez-les directement via un Zend_Db_Statement.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    Cela ne demontre rien du tout, tout depend de l utilisation.

    Ce que tu dis est comme utiliser PDO sans préparer les requêtes.

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par 5h4rk Voir le message
    Ce que tu dis est comme utiliser PDO sans préparer les requêtes.
    On peut faire des requêtes préparées en SQL !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Membre éprouvé
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Points : 1 297
    Points
    1 297
    Par défaut
    C'est un exemple.

Discussions similaires

  1. Contrainte de compatibilité entre 2 objets
    Par duboisfa dans le forum Design Patterns
    Réponses: 16
    Dernier message: 15/09/2010, 11h47
  2. Réponses: 3
    Dernier message: 01/04/2010, 10h04
  3. [1.x] (in)compatibilité entre ie6 et firefox pour les input type text
    Par sab_etudianteBTS dans le forum Symfony
    Réponses: 1
    Dernier message: 07/11/2008, 13h51
  4. [Excel/Modèle Objet] Comment fonctionnent les Workbook et Worksheet
    Par SmOkEiSBaD dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 14/05/2008, 10h39
  5. [VS 2005 RTM][CF 2.0] Compatibilité entre les versions
    Par le-roy_a dans le forum Visual Studio
    Réponses: 3
    Dernier message: 09/11/2005, 16h48

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