2010-04-07 7 views
2

Je travaille sur une application web PHP et j'essaie d'utiliser le modèle MVC. J'ai beaucoup de choses qui existent en tant qu '«entités de base de données» - une rangée, ou un ensemble de rangées connexes, qui sont conceptuellement une «chose» reconnaissable par l'homme. Donc, j'essaie souvent de fournir une interface à cette chose dans une classe de modèle. Donc, bien sûr, la fonctionnalité run of the mill est d'avoir une entité existante, d'en obtenir des données et parfois de la mettre à jour. Cependant, lorsque je rencontre des problèmes, c'est quand j'ai besoin de créer une nouvelle entité. Aucune des données par défaut pour une entité existante n'existe pour le moment!modélisation des entités de base de données dans MVC - comment les créer?

Par exemple, mes __construct() méthodes ont souvent des arguments (à savoir $id pour WHERE id = $id) afin que je puisse sélectionner des données dans la base de données et remplir toutes les propriétés de l'objet à partir de ces données. Cependant, quand je veux créer une nouvelle entité, les valeurs de ces arguments n'existent pas encore!

Comment gérez-vous tous cette situation? Avez-vous

  • essayer de fournir des fonctionnalités liées à la création et la manipulation ultérieure dans le même objet
  • ont une autre classe juste pour générer l'entité
  • éviter __construct et ont somthing comme create() de nouvelles entités et instantiate() pour existantes ceux
  • quelque chose d'autre?

Répondre

2

Si vous avez besoin de créer de "nouveaux" objets, je ne pense pas que vos constructeurs devraient charger à partir de la base de données par défaut. Puisque PHP ne supporte pas la surcharge des fonctions (donc vous ne pouvez pas avoir de constructeurs surchargés), vous pouvez simplement supprimer le code "populate from database" du constructeur dans une fonction à cet effet, ou donner l'argument $id -type par défaut valeur qui indique que les propriétés ne doivent pas être remplis à partir de la base de données:

function __construct($id = 0) 
{ 
    if ($id == 0) 
     // create with blank properties 
    else 
     // load from database 
} 

Ensuite, si vous voulez un nouvel objet, vous appelez simplement sans arguments, et si vous voulez charger à partir de la base de données, vous incluez la argument d'id.

Questions connexes