2010-01-12 4 views
1

J'ai trois tables: "users", "courses" et "documents". Je voudrais télécharger des documents aux utilisateurs aussi bien qu'aux cours, ainsi j'aurais besoin de deux belongsTo-relations pour le modèle de document. Certains appartiennent à un modèle, d'autres à l'autre.CakePHP: Modèle qui appartient à plusieurs autres, un à la fois

Existe-t-il une solution simple pour construire ces relations?

Comment puis-je configurer les actions "add"? Je sais que je pourrais mettre en place deux tables de jointure et utiliser HABTM, mais cela ne me semble pas correct. Un document appartient uniquement à un autre élément. En outre, je veux être en mesure d'étendre les relations à plus de modèles si nécessaire.

Répondre

4

Ce que vous cherchez est appelé polymorphisme. Fondamentalement, vous n'associez pas un modèle avec un autre modèle fixe à travers un seul champ other_model_id, mais vous gardez trace de deux champs: other_model_class et other_model_foreign_key. De cette façon, vous pouvez associer un Document avec class: User, id: 42 dans un cas et class: Course, id: 42 dans un autre cas. Il y a un Behavior in the Bakery, ce qui devrait être un bon point de départ.

+0

+1 Ceci est un comportement puissant qui fonctionne très bien. Je l'ai utilisé avec beaucoup de succès sur quelques projets. –

+0

Voir cette question connexe pour CakePHP 2 [Associations polymorphes dans CakePHP2] (http://stackoverflow.com/questions/12835298/polymorphic-associations-in-cakephp2) –

Questions connexes