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
-~----------~----~----~----~------~----~------~--~---

Répondre à