Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-05-2007 16:06:45

philsmile
Nouveau membre
Date d'inscription: 10-05-2007
Messages: 8

ORM de ZF

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

Code:

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

Code:

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

Code:

class Civilite extends Zend_Db_Table_Abstract
{
    protected $_name = 'Civilite';
    
    protected $_primary = 'id_civilite';

    protected $_dependentTables = array('Personne');
}

Modèle Personne

Code:

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

 

#2 10-05-2007 17:22:10

Julien
Membre
Date d'inscription: 16-03-2007
Messages: 501

Re: ORM de ZF

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

 

#3 14-05-2007 14:35:56

philsmile
Nouveau membre
Date d'inscription: 10-05-2007
Messages: 8

Re: ORM de ZF

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

 

#4 22-08-2007 17:14:49

samy
Nouveau membre
Lieu: Montpellier
Date d'inscription: 18-07-2007
Messages: 9
Site web

Re: ORM de ZF

Est-il possible de faire heriter ces 2 methodes (_fetch et _searchRelation) dans Zend_Db_Table_Abstract  plutot de l'inclure à chaque fois dans mes modeles ?


SAMY

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages