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

QxOrm Discussion :

Explication sur la notion de relation


Sujet :

QxOrm

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 151
    Par défaut Explication sur la notion de relation
    Hello,

    J'aimerais avoir une précision sur la notion de relation.

    Imaginons que j'ai une table mappée Person et que cette table ait une relation 1-n vers une table Form (un patient a plusieurs formulaires, noté 'forms' dans la classe Person).

    Avec QxOrm, quand je fais une recherche (query), est ce que ça me rempli automatiquement la liste 'forms' membre de la classe Person ?

    Ceci ne serait pas top pour moi sachant que la liste peut devenir très grande et que parfois, on a juste besoin de récupérer le nom des personnes.

    Tiens et d'ailleurs, avec QxOrm pour une requête du type recupérer uniquement le nom d'une personne, est ce que ça ne rempli que le champ name de la classe Person ?

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 151
    Par défaut
    Mmmh je crois que cette méthode résous le problème:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QSqlError 	qx::dao::fetch_by_id_with_relation (const QStringList &relation, T &t, QSqlDatabase *pDatabase)

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 482
    Par défaut
    Avec QxOrm, quand je fais une recherche (query), est ce que ça me rempli automatiquement la liste 'forms' membre de la classe Person ?
    Ça dépend le fetch que tu utilises
    C'est la notion de lazy fetch vs eager fetch :
    • si tu utilises qx::dao::fetch_by_id(), ça correspond à un lazy fetch : la requête SQL ne s'effectue que sur 1 seule table => donc dans ton cas, uniquement la classe Person, et les formulaires ne seront pas valorisés ;
    • si tu utilises qx::dao::fetch_by_id_with_all_relation ou qx::dao::fetch_by_id_with_relation, ça correspond à eager fetch : la requête SQL va interroger plusieurs tables dans la BDD, et tu peux fetcher une personne + tous les formulaires associés en une seule requête.


    avec QxOrm pour une requête du type recupérer uniquement le nom d'une personne, est ce que ça ne rempli que le champ name de la classe Person ?
    Un peu la même réponse que tout à l'heure, ça dépend de ce que tu demandes de faire à la bibliothèque QxOrm :
    • Par défaut, QxOrm remonte toutes les colonnes d'une table ;
    • Si tu veux fetcher uniquement quelques colonnes, il faut le préciser dans la fonction qx::dao::... (cf. paramètre const QStringList & columns) : ce qui donnerait par exemple : qx::dao::fetch_by_id(my_person, NULL, QStringList() << "nom" << "prenom");
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 151
    Par défaut
    Et si j'ai une relation définie comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t.relationOneToMany( &Form::pages, "list_pages", "form_id" );
    Je travaille sur une session,
    est ce que je met:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QStringList() << "list_pages"
    comme second paramètre de la méthod insert ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    session.insert( monPtr, QStringList() << "list_pages");
    Parce que ça n'a pas l'air de fonctionner...
    Ce qui pourrait être pas mal, c'est de proposer également un insert_with_all_relations dans QxSession

  5. #5
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2010
    Messages
    482
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 482
    Par défaut
    Parce que ça n'a pas l'air de fonctionner...
    C'est bizarre, ton code a l'air correct : ça te génère quoi comme requête SQL ?
    Tu peux mettre la trace générée par QxOrm stp ?

    Ce qui pourrait être pas mal, c'est de proposer également un insert_with_all_relations dans QxSession
    J'avais prévu le coup
    Il suffit de mettre : session.insert(monPtr, QStringList() << "*"); (à tester pour être certain que ça fonctionne ).
    Le site de la bibliothèque QxOrm : bibliothèque C++ de gestion de données (Mapping Objet Relationnel ou ORM) basée sur les frameworks Qt et boost.
    QxEntityEditor : éditeur graphique pour la bibliothèque QxOrm (application multi-plateforme pour gérer graphiquement le modèle d'entités).

    Tutoriel : installer un environnement de développement avec QxOrm sous Windows.
    Tutoriel qxBlog : gestion de blogs en C++/Qt.
    Tutoriel qxClientServer : création d'un serveur d'applications en C++/Qt.

  6. #6
    Membre très actif
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    151
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 151
    Par défaut
    Je suis en train de te faire un exemple, ça va me prendre un petit bout de temps.

    Bien joué pour le "*" ! Astucieux

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

Discussions similaires

  1. brêve explication sur quelques notions basiques
    Par I'm_HERE dans le forum Scripts/Batch
    Réponses: 7
    Dernier message: 15/02/2010, 20h01
  2. Brève explication sur quelques notions basiques
    Par I'm_HERE dans le forum FAQs Windows
    Réponses: 7
    Dernier message: 15/02/2010, 20h01
  3. Réponses: 17
    Dernier message: 11/11/2008, 12h17
  4. explication sur les notions de commande et de requête !
    Par bnuitrare dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 11/02/2007, 18h20
  5. Explication sur notion de bloc
    Par Melvine dans le forum Oracle
    Réponses: 1
    Dernier message: 09/04/2006, 20h04

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