2009-09-03 11 views
1

J'utilise CakePHP pour construire une application en utilisant le modèle MVC, mais ma question est agnostique, je suppose.MVC débutant question - édition de plusieurs-à-plusieurs relations

Voici un aperçu d'une partie de mes données:

ITEMS (id, name, description) 
LOCATIONS (id, name) 

Le tableau des articles décrit un type d'élément (« pomme », « orange », « banane »), pas des objets.

Chaque emplacement peut contenir un nombre quelconque d'éléments. Pour maintenir ce nombre à plusieurs, j'ai ce tableau:

ITEMS_LOCATIONS (id, item_id, location_id, quantity) 

// eg (1, "home", "apple", 5) --> I have 5 apples at home 
// (2, "work", "apple", 2) --> I have 2 apples at work 
// (1, "home", "orange", 1) --> 1 orange at home 
// (Don't worry - I have numeric ids... this is just an example) 

Maintenant, je dois pouvoir modifier ces informations « d'inventaire », mais je ne sais pas exactement quel modèle ou le contrôleur doit être la manipulation il? Si le contrôleur locations doit avoir une action editInventory? Ou devrait le contrôleur items ont editLocations ou quoi? Devrais-je faire un tout nouveau modèle?

+0

OT mais avez-vous envisagé de regarder CodeIgniter?Je le préfère car il est beaucoup plus léger que CakePHP ou Symfony. – cletus

+0

Je suis (évidemment) tout nouveau à ces cadres, donc je suis en train de tester comment ils fonctionnent. CI ou Kohana sera certainement quelque chose que je regarde aussi. – nickf

Répondre

1

Il n'y a pas de véritables règles dures et rapides pour cela. Utilisez ce qui vous semble le plus logique.

Dans votre cas, vous voudrez probablement contrôler les objets à un emplacement, afin d'avoir une URL comme /location/42/items ou /location/42/inventory ou /location/42/items/edit serait probablement le plus de sens. Ergo, effectuez une action appropriée dans votre Contrôleur de localisation.

L'inverse, si vous voulez contrôler à quel emplacement un élément est, /item/42/locations a probablement plus de sens. Si les deux sont également "importants", vous pouvez en faire un contrôleur supplémentaire et utiliser /inventory/edit/42, quoi que cela signifie spécifiquement pour vous.

En ce qui concerne le modèle, vous pouvez prep votre $data soit manière qu'il met à jour le modèle HABTM lors de l'utilisation saveAll(), ou vous pouvez manipuler le modèle HABTM directement comme $this->Item->ItemsLocation->save(). Habituellement, vous n'avez pas besoin de cuire le modèle HABTM, sauf si vous avez besoin d'être connecté aux autres modèles.

1

C'est vraiment subjectif.

Vous souhaitez absolument avoir une action Modifier sur votre contrôleur d'inventaire pour modifier les détails de l'élément d'inventaire et une action Modifier sur votre contrôleur de position pour modifier les détails de l'emplacement. En ce qui concerne la gestion de la relation, vous voudrez probablement réfléchir à la façon dont vous travaillez avec cette relation. En général, vous ajoutez probablement des emplacements à un élément, auquel cas vous pouvez souhaiter une action AddLocation sur votre contrôleur Items. ou êtes-vous plus susceptible d'ajouter des éléments à un emplacement, auquel cas vous voulez probablement une action AddItem sur votre contrôleur de localisation. Peut-être que vous allez dans les deux sens et dans ce cas peut-être il est possible de créer un contrôleur ItemLocations et faire le travail là-bas ....

HTH

0

J'aurais tendance à transmettre un identifiant de localisation au contrôleur d'items, et à le stocker comme clé étrangère dans l'enregistrement de l'article.

+0

c'est une relation many-to-many (hasAndBelongsToMany) cependant. Chaque emplacement peut contenir plusieurs éléments, et chaque élément peut avoir plusieurs emplacements, donc je ne peux pas simplement stocker locationId dans la table des éléments – nickf