- 1
[Opened] Utilisation d'une table de jointure dans un DAO
Posted by adrien on 07/02/2009 20:31
Bonsoir, je découvre Jelix en ce moment et je rencontre un problème sur un CRUD.
En fait j'ai deux table, "items" et "subitems", pour lesquel j'aimerais créer des CRUD. J'ai aussi une table dont la clé primaire est composé de deux clés étrangère qui sont les clés primaire des deux tables précédente. C'est ma table de jointure et elle s'appelle "items_subitems".
Mon problème est sur la vue "liste" du CRUD de "items". Je souhaite faire apparaître une propriété pour chaque enregistrement. Cette propriété est de type string. Elle doit contenir une liste à virgule des enregistrements de "subitems" liés à l'enregistrement de "items" courant. La liaison se fait grace à la table de jointure.
Pour l'instant, j'ai écris ma propriété comme ça:
<property name="subitemslist" fieldname="label" table="s" datatype="string" selectpattern="GROUP_CONCAT(%s SEPARATOR ',')" />
J'ai aussi ajouté un "GROUP BY" à la conditions de sélection:
protected function _indexSetConditions($cond) { $cond->addItemGroup('id'); }
Enfin j'ai tenté d'ajouter mes tables étrangère au DAO:
<primarytable name="i" realname="items" primarykey="id" /> <foreigntable name="mm" realname="items_subitems" primarykey="id_items" onforeignkey="id" /> <foreigntable name="s" realname="subitems" primarykey="id" onforeignkey="id_subitems" />
Mais cela ne marche pas: Déjà, l'ajout de la clause GROUP BY ne prend pas en compte le nom de la table, donc le champs est ambigue. Ensuite, la jointure entre la table "mm" et la table "i" est bien faite, mais je ne trouve pas le moyen de faire une jointure entre "s" et "mm" car dans l'état actuel des choses, c'est une jointure entre "s" et "i" que j'obtiens.
Donc voila, je cherche une solution pour arriver à avoir cette vue "liste". Merci d'avoir pris le temps de lire ce post, n'hésitez pas à me demander des précisions.
[Opened] Re: Utilisation d'une table de jointure dans un DAO
Posted by laurentj on 07/03/2009 15:14
Bonjour
jDao ne permet pas de faire des jointures avec des tables de jointures. Donc aucune chance d'y arriver avec le contrôleur CRUD tel qu'il est.
Il va falloir faire tes requêtes à la main...
Note que dans le cadre du formulaire d'edition, le choix des subitems pour un item donné se ferait dans une liste à selection multiples (ou des cases à cocher ou autre). Et ça bien sûr c'est tout à faire faisable, puisqu'il s'agit de deux requetes séparées (une pour récupérer l'item et l'autre pour récupérer les subitems correspondant).
- 1