Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Re-bonjour à tous,
Je continue mon exploration du zend framework, et je bloque un petit peu sur la fonction mentionnée en sujet.
Je vai essayer d'être le plus complet possible, voici un aperçus des tables que j'utilise:
La table Lex correspond à des bâtiments, dans chaques batiment je peux installer du matériel, et lors de leur installation, suivant le type de matériel, il y a certaines information techniques à remplir (Log d'accès, IP, emplacement dans le rack, ...).
Chaque matériel n'a pas besoin du même type d'information technique (les attributs) mais ont des choses en commun, d'où la table de liaison.
Ma question est la suivante, en utilisant les $_referenceMap du zendFramework, est-il possible d'avoir directement un tableau contenant toutes les infos matériel pour un seul lex ?
Pour l'instant j'ai fait ceci, qui marche très bien:
$rowLex = $dbLex->find($lexId); $lex = $rowLex->current(); $rowsetMaterial = $lex->findManyToManyRowset('DbMaterial', 'DbLexMaterial');
Avec la fonction findManyToManyRowset est-il possible d'aller chercher des informations plus loin qu'un seul niveaux via une table de liaison ?
Ai-je plutot interet à faire du FullLoading (j'ai vu pas mal de tuto qui en parle, mais ça me semble lourd comme méthode, détrompez-moi si ej me trompe)
Ou bien le plus simple est-il tout simplement de faire un select->join ?
Merci d'avance
Hors ligne
findXXXViaTableLiaison peut être ?
Hors ligne
Bast a écrit:
findXXXViaTableLiaison peut être ?
findXXXViaTableLiaison est la méthode magique de findManyToManyRowset();
et je suis limité à un seul niveaux de liaison, hors ici je dois remonter de 2 niveaux:
je dois passer par Lex_Material pour savoir sur quel Lex je me trouve, et je dois Passer par Material_Material_Attribute afin d'avoir le nom des attributs technique du dit matériel en place.
Alors avec une requete sql c'est facile, ça donne ça:
SELECT Lex_Material.Lex_Material_Name , Material.Material_Brand , Material.Material_Name , Material_Attribute.Material_Attribute_Name , Lex_Material_Technical_Info.Lex_Material_Technical_Info_Value FROM intranet.Lex_Material INNER JOIN intranet.Material ON (Lex_Material.Material_Id = Material.Material_Id) INNER JOIN intranet.Lex ON (Lex_Material.Lex_Id = Lex.Lex_Id) INNER JOIN intranet.Lex_Material_Technical_Info ON (Lex_Material_Technical_Info.Lex_Material_Id = Lex_Material.Lex_Material_Id) INNER JOIN intranet.Material_Material_Attribute ON (Material_Material_Attribute.Material_Id = Material.Material_Id) AND (Lex_Material_Technical_Info.Material_Material_Attribute_Id = Material_Material_Attribute.Material_Material_Attribute_Id) INNER JOIN intranet.Material_Attribute ON (Material_Material_Attribute.Material_Attribute_Id = Material_Attribute.Material_Attribute_Id) WHERE (Lex.Lex_Id = '02ALS0');
Mais concretement avec le ZF j'ai un peu de mal à saisir comment on gère ce genre de requete (et encore, c'est pas la plus dur ni la plus longue de ma BDD qui fait une centaine de tables environ).
Si il y une bonne âme spécialisé en requete à rallonge qui veut bien m'aider, je serai tout plein de bonheur dedans mon corps.
Le but n'étant bien entendu pas de faire le code à ma place mais de m'expliquer comment on gère ce genre de galère...
Hors ligne
je cherchais a faire ca aussi pendant un moment, il me semble que ce n'est pas possible(en tout cas j'ai abandonné l'idée), maintenant, je fais ca directement avec la syntaxe objet pour ces requetes là(meme pour toutes )
Hors ligne
ok
Quand tu dis que tu utilise la syntaxe objet pour toute tes requêtes tu veux dire ça ?
$db = new DbTable(); $select = $db->select(); $select->from(); $select->join(); $select->query();
Merci pour ta réponse, ça va m'éviter de continuer à m'acharner sur la doc
Et si qqun dément, apparemment il y a deux personnes d'interressées ^__^
EDIT
Du coup ça me pose une autre question, si tu utilise ça, quel est le meilleur emplacement pour ce code ? dans le controller ou une fonction dans le modèle d'une table de la Db ?
Dernière modification par Asfaloth (03-06-2008 15:47:15)
Hors ligne
Voila, je parlais de cette syntaxe là , je sais pas si il y a un nom officiel pour dire "SQL Objet", m'enfin
J'ai mi ca dans la classe de ma table de mon ORM, donc dans l'équivalent du modèle pour le MVC
Hors ligne