Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Je m'intéresse de plus en plus à ZF et je bloque pour le moment sur l'ORM. Il y a certaines choses que j'oublie de faire ou que je n'ai pas bien compris. Voici la situation actuelle :
J'ai deux tables MySQL : une table civilite et une table personne. Une personne a une seule civilité et une civilité peut appartenir à 0 à N personnes.
Structure de la table civilite
CREATE TABLE `civilite` ( `id_civilite` int(11) NOT NULL auto_increment, `libelle_civilite` varchar(15) NOT NULL, PRIMARY KEY (`id_civilite`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Structure de la table personne
CREATE TABLE `rappel_tel` ( `id_personne` int(11) NOT NULL auto_increment, `id_civilite` int(11) NOT NULL, `nom_personne` varchar(50) NOT NULL, `prenom_personne` varchar(50) NOT NULL, PRIMARY KEY (`id_personne`), KEY `FK_personne_civilite` (`id_civilite`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; ALTER TABLE `personne` ADD CONSTRAINT `FK_personne_civilite` FOREIGN KEY (`id_civilite`) REFERENCES `civilite` (`id_civilite`);
Je désire l'ORM (Mapping Objet Relationnel) sur ces deux tables. Comment je dois m'y prendre pour mettre en place cela ?
Voici le code de mes modèles :
Modèle Civilite
class Civilite extends Zend_Db_Table_Abstract { protected $_name = 'Civilite'; protected $_primary = 'id_civilite'; protected $_dependentTables = array('Personne'); }
Modèle Personne
class Personne extends Zend_Db_Table { protected $_name = 'personne'; protected $_primary = 'id_personne'; protected $_dependentTables = array('Civilite'); protected $_referenceMap = array( 'Civilite' => array( 'columns' => array('id_civilite'), 'refTableClass' => 'Civilite', 'refColumns' => 'id_civilite'); }
Est-ce correct ? Quand je fait appelle à la méthode find() de mon modèle Personne, je n'ai que la valeur de l'attribut id_civilite et non son libellé. Avec le mapping je ne devrais pas récupérer également son libellé. Je n'ai peut être pas bien compris la notion d'ORM ou j'ai oublié une étape ?
Merci d'avance pour votre aide...
Hors ligne
C'est ce que l'on appelle le Lazy loading.
J'ai écrit un billet la dessus ( ici ).
ZF est en Lazy Loading, il ne va pas de lui même chercher les objets étrangers à une collection.
Ceci a été décidé au sein de la dev team, car les ressources actuelles ( entendez les developpeurs de ZF ), ne sont pas suffisantes pour implémenter cette notion dans l'immédiat.
J'ai proposé une solution (non complète) dans mon billet, ce qui signifie bien que rien n'est impossible.
ZF est livré tel quel, il est ce qu'il est, et possède l'avantage d'être extrêmement maniable. Il n'est donc pas impossible, et souvent pas compliqué ( un peu de génie logiciel ... ) d'implémenter le comportement que l'on désire dedans.
En revanche, cette caractéristique va certainement être implantée dans les futures versions de ZF ;-)
Hors ligne
Merci pour ta réponse.
En lisant ton billet, je vois le principe du Lazy loading.
Spécialement, vu mes compétences, ce n'est pas encore de mon niveau mais j'en prends bonne note pour l'avenir.
Hors ligne