2010-05-06 5 views
1

Je me demandais une chose à propos de la création de modèles. Si je fais par exemple Modèle de page. Est-ce les deux: Il peut récupérer une ligne de la table ou toutes les lignes. En quelque sorte, je mélange les objets et la base de données.PHP: MVC et le modèle

Je l'ai pensé comme ceci: Je devrais faire un Page-classe qui représenterait une rangée dans la table. Il aurait également toutes les méthodes de base CRUD.

Ensuite, je devrais faire un Pages-classe (somekind de collection) qui récupérerait des lignes de la table et instancierait un objet Page de chaque rangée. Est-ce que c'est un peu bizarre?

Si quelqu'un pouvait m'expliquer l'idée de modèle tout au long .. Im encore confus.

Peut-être Im penser l'ensemble POO trop difficile ..

Et par la façon dont ce forum est grande. J'espère que les gens comprendront simplement mes problèmes. Il h. J'ai été un programmeur de style procédural de longue date et maintenant, en 3 mois, j'ai plongé dans les frameworks OOP et MVC et PHP et je suis de plus en plus excité au jour le jour quand j'explore ce genre de choses!

+0

duplication possible de http://stackoverflow.com/questions/2770553/trying-to-understand-mvc-models-advice – Gordon

Répondre

1

Est-ce les deux: Il peut récupérer une ligne de la table ou toutes les lignes.

Vous pouvez utiliser un modèle pour interagir avec la base de données, par vous pouvez faire tout ce que vous voulez, par exemple obtenir un ou plusieurs enregistrements, en insérant des documents, la mise à jour, etc.

La voie à suivre I vous suggérerait de créer un modèle pour chacune des pages distinctes de votre site qui pourraient interagir avec la base de données. Vous pouvez créer différentes fonctions à l'intérieur d'un même modèle pour une seule page en fonction des besoins de la page pour interagir avec la base de données.

1

Cela dépend si vos modèles représentent des instances ou ne sont que des objets ORM.

Si un modèle représente une instance, chaque enregistrement (ligne) de la base de données devient un nouvel objet Modèle. "Tous les enregistrements" seraient simplement représentés par un tableau de ces objets. Ruby on Rails par exemple le fait de cette façon.

Si votre modèle est plutôt un objet ORM, il ne représente que la base de données en tant que telle et vous permet de récupérer des enregistrements de la base de données. Les résultats peuvent être dans un objet conteneur ou simplement un tableau normal. CakePHP par exemple utilise cette méthode.

+0

Gâteau et RoR utilisent ActiveRecord. Il n'y a aucune raison pour qu'un ensemble de lignes ('tous les enregistrements') soit un tableau. Il peut s'agir d'un SplObjectStorage ou d'une classe d'ensemble de lignes dédiée, comme Zend_Db_Rowset. Je ne suis pas sûr de ce que vous entendez par objet ORM, mais je suppose que vous voulez dire un QueryObject. Sachez qu'il existe également TableData Gateway, RowData Gateway et DataMapper. Et le modèle n'est pas seulement la base de données de toute façon. – Gordon

+0

@Gordon Le "ActiveRecord" utilisé par Cake n'est pas vraiment un ActiveRecord. Vous ne pouvez pas avoir plusieurs instances d'un modèle, il n'y a jamais qu'une instance dans laquelle vous alimentez des données ou dont vous récupérez des données. Appelez-le QueryObject ou tout ce que vous voulez. S'il vous plaît pardonnez le reste de cette réponse simplifiée pour ne pas couvrir tous les cas possibles, j'ai essayé d'illustrer la différence générale pour le PO. – deceze

+0

Je suis à peu près sûr d'avoir écrit du code Cake qui fait 'new User' où je veux. Eh bien, mais ça fait longtemps. Peut-être qu'ils l'ont changé :) – Gordon