web-dev-qa-db-fra.com

PHP ORM: Doctrine vs Propel

Je commence un nouveau projet avec symfony qui s'intègre facilement avec Doctrine et Propel , mais je dois bien sûr faire un choix .. .. Je me demandais si les personnes les plus expérimentées avaient des avantages et/ou des inconvénients généraux en ce qui concerne l’un ou l’autre de ces deux candidats?

Merci beaucoup.

EDIT: Merci pour toutes les réponses, truc utile. Il n'y a pas de réponse vraiment correcte à cette question, je vais donc marquer comme approuvée celle qui a obtenu le vote le plus populaire.

126
Tom

J'irais avec Doctrine. Il me semble que c'est un projet beaucoup plus actif et que l'ORM par défaut pour symfony est mieux supporté (même si officiellement les ORM sont considérés comme égaux).

De plus, j'aime mieux votre façon de travailler avec les requêtes (DQL au lieu de Criteria):

<?php
// Propel
$c = new Criteria();
$c->add(ExamplePeer::ID, 20);
$items = ExamplePeer::doSelectJoinFoobar($c);

// Doctrine
$items = Doctrine_Query::create()
       ->from('Example e')
       ->leftJoin('e.Foobar')
       ->where('e.id = ?', 20)
       ->execute();
?>

(La mise en œuvre de la 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 Doctrine documentation vaut la peine d’être lue: http://www.doctrine-project.org/documentation/manual/1_2/fr/introduction:doctrine- expliqué

Pour résumer: si je débutais un nouveau projet ou si je devais choisir entre apprendre Doctrine et Propel, je choisirais Doctrine tous les jours.).

76
phidah

Je suis partial, car j’aide un peu lors de la prochaine version de Propel, mais vous devez considérer que Propel est bien le premier ORM disponible, puis il a pris un peu de retard lorsque Doctrine a été créé, mais maintenant 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 beaucoup d’améliorations, en particulier dans la création de Criteria code que vous écrivez).

J'aime Propel car il semble être 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 dans de nombreuses classes. J'aime bien comprendre. des bibliothèques que j'utilise (pas trop de "magie"), mais bien sûr, j'ai plus d'expérience avec Propel, donc peut-être Doctrine n'est pas si compliqué en coulisse. Certains disent que Propel est plus rapidement, mais vous devriez vérifier cela par vous-même et déterminer si cela l'emporte sur les autres différences.

Peut-être devriez-vous aussi 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 toujours à jour avec la dernière version de Symfony.

40
Jan Fabry

Cela dépend des préférences personnelles. J'utilise Propel parce que (entre autres choses) j'aime le fait que tout a sa propre méthode de getter & setter concrète. Dans Doctrine, ce n'est pas le cas.

Propulser:

$person->setName('Derek');
echo $person->getName();

Doctrine:

$person->name = 'Derek';
echo $person->name;

La raison pour laquelle j'aime avoir des accesseurs et des setters est que je peux y mettre toutes sortes de logique, si besoin est. Mais ce n'est que ma préférence personnelle.

Je devrais également ajouter que, bien que Propel ait été lent par le passé, son développement est à nouveau actif. Il a publié plusieurs nouvelles versions au cours des derniers mois. La version la plus récente de Propel inclut ne "interface de requête fluide" similaire à celle de Doctrine, vous n’avez donc plus besoin d’utiliser des critères si vous ne le souhaitez pas.

22
lo_fye

Il convient de noter Doctrine 2 est en cours de développementpublié [ed] et fonctionne presque complètement différemment de la version stable actuelle de Doctrine 1. Il s'appuie sur le modèle Data Mapper au lieu de Active Record et utilise un "gestionnaire d'entités" pour gérer la logique de persistance. Une fois publié, il ressemblera davantage à 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 la tête et les épaules au-dessus de Doctrine 1 (à mon avis, et je ' Nous n’avons jamais utilisé Propel). Il est probable que la communauté Doctrine s’y intéressera lorsqu’elle sera publiée.

Je vous encourage à consulter Doctrine, mais si vous préférez le style Active Record que Propel et Doctrine utiliser maintenant, vous voudrez peut-être rester avec Propel.

20
Bryan M.

Je suggérerais d'utiliser propel 1.6, qui convient mieux à la fonction de saisie semi-automatique d'IDE.

5
petkopara

Les deux références étant quelque peu dépassées, vous couvrez néanmoins certaines généralités. En gros, vous devrez évaluer votre expérience du cadre en tant que tel. Un inconvénient majeur de doctrine est l'incapacité de disposer d'un IDE qui vous permet d’auto-coder dans propel est un gagnant, les courbes d’apprentissage propulsant et doctrine étant très différentes, il est plus facile de les propulser si votre projet doit gérer la doctrine complexe de l’utilisation des modèles de données, vous voulez travailler rapidement avec un ORM qui est le mieux documenté et trouver plus de support dans les utilisations de Propel Internet, est beaucoup plus mature et je crois que plus utilisé.

http://propel.posterous.com/propel-141-is-out

5
Mauricio Herrán

Après avoir utilisé les deux pendant plusieurs années, je préfère Propel 2 à Doctrine simplement en fonction de la façon dont vous construisez votre logique de requête. Doctrine est aussi détaillé que Je pense que Propel propose une méthode plus fluide et plus orientée objet pour créer et gérer les interactions de requête.

Pour moi, cela a conduit à moins de code dans le modèle et davantage de structures autour de la manière dont la logique peut/sera traitée. Cela s'est traduit par la construction de nombreuses interactions en tant que fonctionnalité commune. (Après tout, 90% de ce que vous ferez avec une base de données ne sera qu'un certain degré d’exploitation crud.)

En fin de compte, les deux sont puissants, gérables et feront le travail. Mes projets personnels et mes centres d’intérêt utilisent Propel ORM 2 et les projets futurs, s’ils sont encore écrits en PHP suivront cette route).

Je les utilise tous les jours depuis 3 ou 4 ans.

2
Ryan Rentfro

Je ne suis pas un utilisateur de PHP 5 ORM non-framework, mais voici quelques bons articles de comparaison (au cas où vous ne les ayez pas encore vus):

http://codeutopia.net/blog/2009/05/16/doctrine-vs-propel-2009-update/

http://trac.symfony-project.org/wiki/ComparingPropelAndDoctrine

Les deux conclusions favorisent Doctrine en tant que nouvelle génération d’ORM pour Symfony.

2
Trav L

Je suggérerais d'utiliser plugin DbFinder . C’est en fait un plugin très puissant qui supporte les deux, et qui est assez puissant. En fait, j'aime mieux l'utiliser que l'un ou l'autre.

1
Mike Crowe