Bonjour Medhi, Différence des HABTM : dans le cas d'un réflexif, on ne créé que 2 tables, dont la seconde contient deux fois la même clé étrangère (ok, elle ne porte pas le même nom, mais elle représente bien la même donnée deux fois) ; dans un HABTM classique, on créé une troisième table à partir des deux autres et cette 3e table contient deux clés étrangères bien distinctes.
Le mal que cela pourrait faire, c'est que tout ceci est contraire au modèle et à la théorie relationnels, que cela oblige à réécrire toutes les tables générées par des outils de modélisation SQL pour les faire "entrer dans le modèle Cake" et que cela ajoute donc une clé "artificielle" là où il n'y en a pas besoin. Dans l'absolu cela peut aussi entraîner d'importantes pertes de performances (I/O "bound effect") pour des grosses tables (factures par exemple). Sinon, ton HABTM réflexif est exactement ce que je fais et qui était recommandé par l'intervenant sur le Google Groups anglais. Je suis d'accord : il n'a pas besoin de modèle donc on ne crée finalement que des alias. Jusqu'à présent, je n'arrivais pas à le faire "fonctionner" correctement. Mais maintenant j'y suis presque. Le seul problème qui reste à analyser et améliorer, c'est que lors d'un save(), si je dois sauver d'autres données liés à mon modèle Article par HABTM, la table "complements" est remplie non seulement de l'id de l'article nouvellement créé et des id de ses compléments, mais aussi des id des autres champs ! Pour simplifier, quand je rentre un article, je peux lui attribuer 0 ou N articles en compléments et 0 ou N tags. Si je lui mets des compléments, mais pas de tags, tout marche bien. Mais dès que je choisis au moins un tag, alors l'id du tag sélectionné est enregistré comme un complément de mon nouvel article ! Si tu as une piste pour résoudre ce léger artefact, je suis preneur... Au final, je pourrais toujours découper le tout avec des query persos et des unbind. Aurélien On 3 mar, 13:27, "Mehdi AMINI" <[EMAIL PROTECTED]> wrote: > (re)Bonjour, > > > Dans mon modèle SQL, j'ai donc une table "Complements" avec un champ > > "complete_id" et un champ "completant_id". > > Pour préciser ma vision, dans le modèle 'Article', un HBTM reflectif > définit tel que : > > var $hasAndBelongsToMany = array( > 'Complete' => array('className' => 'Article', > 'joinTable' => 'complements', > 'foreignKey' => 'complete_id', > 'associationForeignKey' => > 'completant_id'), > 'Completant' => array('className' => 'Article', > 'joinTable' => 'complements', > 'foreignKey' => > 'completant_id', > 'associationForeignKey' => > 'complete_id'), > ); > > ne fonctionnerait-il pas ? > > Dans ce contexte, si cake requiert l'ajout d'un id auto_inc dans la > table complement, quel mal cela pourrait faire ? > > Mehdi --~--~---------~--~----~------------~-------~--~----~ Groupe "Cakephp-fr". Adresse : cakephp-fr@googlegroups.com Pour résilier : [EMAIL PROTECTED] Pour les options : http://groups.google.com/group/cakephp-fr?hl=fr -~----------~----~----~----~------~----~------~--~---