2010-10-25 8 views
2

Je crée un site similaire à un blog wordpress où la page d'accueil affiche une boucle de post: avec le post_summary, les informations sur l'auteur et les tags.Aide pour Codeigniter et modèle de modèle MVC

J'ai quatre tables:

posts | users | tags | tag relationships 

pour afficher tous les résultats que je aurais besoin de faire plusieurs JOIN dans l'instruction SELECT

Cependant, pour rester avec le modèle MVC, devrait-il y avoir un modèle pour chaque table (ou objet?). Donc, ma question est la suivante: Si je faisais un SELECT tout, comment pourrais-je faire cela tout en conservant le modèle MVC?

Pour obtenir toutes les informations requises pour la publication, j'ai besoin de l'identifiant author_id pour obtenir mes informations de la table des utilisateurs ET j'ai besoin de l'identifiant post_id pour obtenir les tags (et ainsi de suite). Si toutes mes requêtes sont dans des modèles différents, quelle est la meilleure façon d'effectuer la requête? Est-ce que je fais un modèle qui fait tous les JOINS et l'emploie juste? Dois-je charger des modèles à partir de la vue? Ou devrais-je faire un travail de requête supplémentaire dans le contrôleur?

Répondre

5

Je pense que vous avez une mauvaise compréhension de l'objectif des modèles. Les modèles doivent traiter les données de votre base de données et ne sont pas limités à 1 table par modèle. Si vous créez un blog, vous aurez vraiment besoin d'un seul modèle. Jetez un oeil sur le tutoriel sur le site web codeigniter, http://codeigniter.com/tutorials/watch/blog/, et relisez le guide de l'utilisateur pour les modèles, http://codeigniter.com/user_guide/general/models.html. Vous pouvez confondre MVC avec un ORM

-1

Créez un modèle pour les JOINS. Il peut inclure post_summary, recent_comments, etc.
Il suffit de l'utiliser dans le contrôleur front_page, le contrôleur side_bar (pour recent_comments, etc).

Il serait préférable de ne pas placer la requête directement dans les vues ou le contrôleur et les vues ne devraient pas avoir besoin d'accéder aux modèles IMO.

5

Ne créez pas de modèle pour les jointures. Comme l'a déjà répondu @Johnny, un modèle et une table n'ont pas besoin d'avoir une relation un-à-un. Dans ce cas, vous affichez des entrées de blog, vous pouvez donc avoir un modèle nommé "Blog", avec une méthode "GetList()". Il n'est pas pertinent que cette requête atteigne plusieurs tables.

Pensez-y conceptuellement. Vous affichez des entrées de blog et chaque entrée de blog est associée à d'autres objets (par exemple, un ID utilisateur). Essayez de penser au domaine, pas à la table.