2010-08-13 21 views
0

Je suis confus quant à la façon de configurer cela en utilisant les conventions de Cake. J'ai une table d'utilisateurs (assez standard: id (pk, auto-incrément), nom d'utilisateur, mot de passe), une table de groupes (également assez standard: id, nom, user_id) et une table de pratique (comme un cabinet médical, pas comme "la pratique rend parfait"). La table de pratique appartiendra à un utilisateur (qui appartient à un groupe dr) et à zéro ou plusieurs autres utilisateurs qui appartiennent à la pratique (et sont des membres standard).Aide pour la conception de la base de données (CakePHP)

est ici un très dessin rugueux de ce que je pense:

user ---(belongs to)---> group 
    | 
    | 
    +<----(belongs to)---- practice 
    |      ^
    |      | 
    +-------------------(belongs to) 

Je comprends comment faire en sorte que peuvent posséder une pratique seuls les membres du groupe « gardien » et je sais comment faire en sorte que chaque utilisateur a un groupe et tout cela.

Normalement je comprendrais comment faire "la pratique a beaucoup d'utilisateur" et "la pratique appartient à l'utilisateur". Là où je suis perplexe, cependant, comment puis-je spécifier qu'une pratique "a un" utilisateur mais aussi "a beaucoup" d'utilisateurs. C'est parce que la pratique ne connaît pas les groupes auxquels appartient un utilisateur dans Cake. Et (à ma connaissance), je ne peux pas dire que "practice.owner_id est une clé étrangère qui correspond à user.id" car Cake ne comprendra pas cela.

Si je me trompe, pouvez-vous s'il vous plaît fournir une explication/lien vers un documentaire pour m'aider sur mon chemin? Merci beaucoup.

Répondre

1

Je ne peux pas simplement dire que "practice.owner_id est une clé étrangère qui correspond à user.id" car Cake ne le comprendra pas.

Eh bien, vous pouvez ... juste pas la façon dont vous pensez.

Vous configurez un belongsTo sur votre modèle Practice ... votre champ user_id dans le Practice sera le propriétaire. Ensuite, configurez un autre belongsTo sur votre modèle d'utilisateur avec un champ practice_id. Si vous le souhaitez, vous pouvez même mettre en place un hasMany sur la pratique pour l'attacher à l'utilisateur. Nommez simplement les associations belongsTo et hasMany différemment. Appelez le propriétaire de la pratique UserTo User dans votre modèle. Ensuite, lorsque vous extrayez des enregistrements de la base de données, vous obtenez un tableau Propriétaire et un tableau Utilisateur sur votre pratique (en supposant que les niveaux $ récursifs appropriés sont utilisés.)

Si vous lisez ceci, cela risque de prêter à confusion ... résumer:

associations utilisateur:

  • belongsTo pratique

associations en pratique:

  • hasMany utilisateur
  • belongsTo Propriétaire (alias pour l'utilisateur)
+0

Merci, qui ressemble exactement ce que je dois. Juste un suivi, quand vous dites que le propriétaire est un alias pour l'utilisateur, voulez-vous dire que je devrais créer une table de base de données différente ou est l'alias un alias de gâteau? – Tim

+0

Désolé, oui, c'est un peu flou ... Fondamentalement, il va juste être le nom de l'association dans votre modèle de pratique. Ensuite, dans l'association elle-même, vous définissez le className du propriétaire à l'utilisateur. Voici une page de manuel à ce sujet: http: //book.cakephp.org/view/1046/Plusieurs-relations-au-même-modèle – Finster

+0

oooooh, j'ai raté ce doc. Merci! Je pense que je comprends maintenant. – Tim

Questions connexes