Je démarre un nouveau projet avec symfony qui est facilement intégré à Doctrine et Propel , mais je dois bien sûr faire un choix .... Je me demandais si les gens plus expérimentés avaient des avantages et / ou des inconvénients généraux pour y aller. l'un de ces deux?
Merci beaucoup.
EDIT: Merci pour toutes les réponses, des trucs utiles. Il n'y a pas de réponse vraiment correcte à cette question, je vais donc simplement marquer comme approuvée celle qui a obtenu les votes les plus populaires.
Réponses:
J'irais avec Doctrine. Il me semble que c'est un projet beaucoup plus actif et étant l'ORM par défaut de symfony, il est mieux supporté (même si officiellement les ORM sont considérés comme égaux).
De plus, j'aime mieux la façon dont vous travaillez avec les requêtes (DQL au lieu de Criteria):
(La mise en œuvre de Doctrine est beaucoup plus intuitive pour moi).
De plus, je préfère vraiment la façon dont vous gérez les relations dans Doctrine.
Je pense que cette page de la documentation Doctrine vaut la peine d'être lue: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained
Pour résumer: si je commençais un nouveau projet ou si je devais choisir entre apprendre Doctrine et Propel, j'irais pour Doctrine n'importe quel jour.
la source
Je suis partial, car j'aide un peu sur la prochaine version de Propel, mais vous devez considérer que Propel était en effet le premier ORM disponible, puis a un peu pris du retard lorsque Doctrine a été créée, mais a maintenant à nouveau un développement actif. Symfony 1.3 / 1.4 est livré avec Propel 1.4, où la plupart des comparaisons s'arrêtent à Propel 1.3. De plus, la prochaine version de Propel (1.5) contiendra de nombreuses améliorations, en particulier dans la création de vos critères (résultant en moins de code à écrire).
J'aime Propel car il semble moins complexe que Doctrine: la plupart du code se trouve dans les quelques classes générées, alors que Doctrine a divisé les fonctionnalités en de nombreuses classes. J'aime bien comprendre les bibliothèques que j'utilise (pas trop de "magie"), mais bien sûr, j'ai plus d'expérience avec Propel, alors peut-être que Doctrine n'est pas si compliquée en coulisses. Certains disent que Propel est plus rapide, mais vous devriez vérifier cela par vous-même et déterminer si cela l'emporte sur d'autres différences.
Peut-être devriez-vous également considérer la disponibilité des plugins Symfony pour les différents frameworks. Je pense que Propel a un avantage ici, mais je ne sais pas combien de plugins listés sont encore à jour avec la dernière version de Symfony.
la source
Cela dépend de vos préférences personnelles. J'utilise Propel parce que (entre autres) j'aime le fait que tout a sa propre méthode getter & setter concrète. Dans Doctrine, ce n'est pas le cas.
Propulser:
Doctrine:
La raison pour laquelle j'aime avoir des getters et des setters, c'est que je peux y mettre toutes sortes de logiques, si j'en ai besoin. Mais c'est juste ma préférence personnelle.
Je dois également ajouter que bien que Propel ait évolué lentement dans le passé, il est à nouveau en développement actif. Il a publié plusieurs nouvelles versions au cours des derniers mois. La version la plus récente de Propel inclut une "interface de requête fluide" similaire à celle de Doctrine , vous n'avez donc plus besoin d'utiliser Criteria si vous ne le souhaitez pas.
la source
Il convient de noter que Doctrine 2 est
actuellement en développementpublié [ed] et fonctionne presque complètement différent de la version stable actuelle de Doctrine 1. Il repose sur le modèle Data Mapper au lieu d'Active Record, et utilise un «gestionnaire d'entités» pour gérer la persistance logique. Une fois publié, il ressemblera plus à Hibernate de Java (Doctrine 1 ressemble plus à ActiveRecord de Rails).J'ai développé avec la version alpha de Doctrine 2, et je dois dire que c'est tête et épaules au-dessus de Doctrine 1 (juste mon avis, et je n'ai jamais utilisé Propel). Il y a de bonnes chances que la communauté Doctrine se dirige vers elle une fois qu'elle sera publiée.
Je vous encourage à consulter Doctrine, mais si vous préférez le style Active Record que Propel et Doctrine utilisent maintenant, vous voudrez peut-être vous en tenir à Propel.
la source
Les deux références sont quelque peu obsolètes, donc vous couvrez néanmoins quelques généralités, en gros vous devrez évaluer votre expérience avec le framework en tant que tel, un inconvénient majeur de la doctrine est l'incapacité d'avoir un IDE qui vous permet de coder automatiquement dans cette propulsion. un gagnant, les courbes d'apprentissage propulsent et la doctrine sont très différentes, il est plus facile de propulser, si votre projet aura besoin de gérer un modèle de données complexe utilise la doctrine, si vous voulez travailler rapidement avec un ORM qui est mieux documenté et trouver plus de support dans Propel Internet utilise, est beaucoup plus mature et je pense que le plus utilisé.
http://propel.posterous.com/propel-141-is-out
la source
Je suggérerais d'utiliser propel 1.6, ce qui est meilleur pour la fonction de saisie semi-automatique de l'IDE.
la source
Je ne suis pas un utilisateur de PHP 5 non-framework ORM, mais voici quelques bons articles de comparaison (au cas où vous ne les auriez pas encore vus):
http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/
http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine
Les deux conlusion favorisent Doctrine en tant que nouvelle génération d'ORM pour Symfony.
la source
Après avoir utilisé les deux pendant un certain nombre d'années, je préfère Propel 2 à Doctrine simplement en fonction de la façon dont vous construisez votre logique de requête. La doctrine est aussi approfondie que possible et la gestion de nombreux aspects correspond à ce niveau de profondeur. Je pense que Propel a une manière plus fluide et orientée objet de créer et de gérer les interactions de requête.
Pour moi, cela a conduit à moins de code dans le modèle et plus de structures autour de la façon dont la logique peut / sera traitée. Cela a abouti à la création de nombreuses interactions en tant que fonctionnalité commune. (Après tout, 90% de ce que vous ferez avec une base de données sera juste un certain degré d'opération grossière.)
En fin de compte, les deux sont puissants, gérables et feront le travail. Mes projets personnels et mes intérêts utilisent Propel ORM 2 et les projets futurs, s'ils sont toujours écrits en PHP, suivront cette voie.
J'utilise les deux au quotidien depuis 3-4 ans.
la source
Je suggérerais d'utiliser DbFinder Plugin . Il s'agit en fait d'un plugin très puissant qui prend en charge les deux et qui est assez puissant. J'aime mieux l'utiliser que l'un ou l'autre.
la source
Si je ne me trompe pas, les deux ORM utilisent un schéma XML et la création de ces définitions de schéma est assez fastidieuse. Si vous avez besoin d'un schéma simple basé sur PHP avec un style fluide. Vous pouvez essayer LazyRecord https://github.com/c9s/LazyRecord, il prend en charge la migration automatique et les générateurs de scripts de mise à niveau / rétrogradation. Et tous les fichiers de classe sont générés statiquement sans coût d'exécution.
la source