2010-08-17 4 views
2

Tout d'abord, je voudrais juste là-bas que je suis un ORM Noob. Je n'ai jamais utilisé un ORM dans ma vie et j'ai atteint un point dans mon développement quotidien que j'ai besoin de faire des relations avancées folles que je crois que Datamapper Overzealous Edition peut m'aider à utiliser Codeigniter.Datamapper (édition Overzealous), Codeigniter et a beaucoup de clarification

Dans ma base de données j'ai les tables suivantes;

utilisateurs
projets
clients
tâches

Voici mes relations souhaitées entre les tables;

  • Un utilisateur peut appartenir à de nombreux projets.
  • Un projet peut avoir plusieurs tâches, mais ne peut avoir qu'un seul client.
  • Un client peut avoir de nombreux utilisateurs et peut avoir de nombreux projets
  • Une tâche ne peut avoir qu'un seul projet

J'ai essayé de mettre en place mes modèles dans le répertoire des modèles comme il est dit dans la documentation du nom du modèle sans le s à la fin, donc pour les utilisateurs, j'ai un modèle user.php et ainsi de suite.

Je sais que la documentation est excellente, mais je n'arrive pas à la comprendre correctement, même si c'est évidemment très facile. Je sais que vous instanciez le modèle en allant par exemple $ u = new User(); à l'intérieur de votre contrôleur, mais ma question est de mettre en place les relations à l'intérieur des modèles. Comment puis-je définir mes modèles pour avoir les relations ci-dessus, par exemple quand je vais chercher une tâche, je peux voir à quel projet il appartient et tout un tas d'informations à partir de ses tables de base de données associées.

J'ai remarqué que dans la documentation, vous utilisez les éléments suivants à l'intérieur du modèle de projets qui devraient indiquer qu'il peut avoir plus d'une tâche pour un projet; var $has_many = array('task')

Est-ce tout ce qu'il ya à faire? Est-ce aussi simple que de définir les variables $ has_many et $ has_one et de mettre le nom de modèle associé dans le tableau?

Répondre

1

Je n'ai jamais utilisé cet ORM particulier, mais j'utilise Doctrine. Si celui que vous utilisez fonctionne de la même manière, alors la réponse simple à votre question est - oui! Avec Doctrine, vous définissez toutes les relations dans les classes du modèle. L'ORM gérera alors tout pour vous. Ainsi, par exemple, si vous instanciez un nouvel objet de tâche ... $ task = new Task(); Ensuite, vous pouvez accéder à la relation avec la table de projet en écrivant simplement $ task-> Project;

Je dois insister sur le fait que le code ci-dessus n'est pas écrit pour le datamapper, donc il pourrait ne pas fonctionner tel quel, mais j'espère que cela clarifie les choses pour vous. On dirait que vous comprenez la documentation mais ne la croyez pas !!!!

+0

Bien qu'ils soient tous deux différents ORM, je pense qu'ils partagent une syntaxe similaire dans la façon dont les tables sont accessibles et les données de terrain pertinentes récupérées. Je suppose que tous les ORM suivent la même méthodologie pour transformer vos tables de base de données en objets et quel que soit l'ORM, les méthodes sous-jacentes sont les mêmes. Datamapper pour la référence de quelqu'un d'autre est écrit en Ruby, mais j'utilise une implémentation PHP de celui-ci. Merci pour votre aide, j'ai juste besoin d'être rassurée et je me rends compte que je comprends la documentation. –

0

C'est tout ce que vous avez à faire tant que votre structure de base de données correspond à la mise en page attendue par Datamapper Overzealous.

J'ai utilisé cet ORM dans un projet que je construisais et pour la plupart, cela a été extrêmement utile et a permis de gagner du temps.

Questions connexes