Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour à tous,
Je viens de commencer de developper ma première application avec ZF.
Parmis les tables de la base de données il y a :
- la table "Produit" : on y trouve tout les champs concerant un produit (Ex. Produit_ID, Produit_Date_Fabrication, Responsable_ID, ...)
- la table "Responsable" : reliée à la première table par Responsable_ID (Clé étrangère dans la table "Produit").
J'ai créé pour chaque tables trois fichers (Classes). Par exemple pour la table "Produit" j'ai créé Application_Model_DbTable_Produits, Application_Model_Produits et Application_Model_ProduitMapper ; exactement comme indiqué dans le tutorial "Démarrez rapidement avec Zend Framework".
Dans le controlleur "ProduitController", l'action "infoAction($produitId)" devrait afficher des informations concernant le produit dont le numéro est passé comme argument. Ces information proviennent à la fois des deux tables via une requette SQL.
Ma question est : Puisque les résultats de la requette proviennent des deux tables, où je devrait mettre le code concerant la requette et le traitement ? Dans ProduitController (infoAction()), ResponsableController, Application_Model_ProduitMapper ou Application_Model_ResponsableMapper ?
Merci d'avance
Hors ligne
Bonsoir,
C'est plus une question logique que technique apparemment
Je dirais, dans la table qui te semble être la table maîtresse, soit celle qui a ton Produit_ID en clé primaire...
Quand tu auras fini le tuto, tu pourras peut-être optimiser tout ça.
Hors ligne
Merci delorbe pour ta réponse,
"C'est plus une question logique que technique apparemment"
Tout à fait d'accrod avec toi.
"Je dirais, dans la table qui te semble être la table maîtresse, soit celle qui a ton Produit_ID en clé primaire"
Dans ce cas il me reste deux choix :
- mettre le code de la requette SQL dans ProduitController (infoAction($produitId)) ;
ou bien
- le mettre dans "Application_Model_ProduitMapper".
Quel est l'endroit idéal où il faut mettre le code des requettes SQL ? (Les méthodes select(), from(), where(), fetchAll(), etc)
Merci
Hors ligne
Selon moi, c'est dans ton Application_Model_ProduitMapper.
En effet, tu vas créer dedans une méthode du genre :
[lang=php]public function getProductInfos($productId = null){ // On vérifie que l'id du produit est bien passé en paramètre if($productId){ // Ici tu construis ta requête $r_result = $db->fetchRow($this->select()->where('')->...); // On renvoie false si pas de résultat return(sizeof($r_result) > 0 ? $r_result : false); }else{ // Si pas d'id produit, on renvoie false return false } }
Que tu pourras appeler de n'importe où (controller, plugin, etc...).
Si ta requête devait être modifiée un jour, tu n'auras qu'un seul endroit où la changer.
Hors ligne
Merci delorbe,
Je vais donc mettre toutes mes requettes dans les Data Mapper Classes.
Merci beaucoup.
Hors ligne
De rien
Hors ligne