19
MARS

Symfony - Quel ORM choisir: Propel ou Doctrine ?

Publié le 19/03/09 à 08h54 par DJo

Symfony propose actuellement deux ORM pour vos projets web: Propel et Doctrine. Suite à une conférence Live tenue par Fabien Potencier (Fondateur et lead développeur de Symfony), voici quelques éléments de réponse pour choisir le bon ORM.

Symfony - Framework PHP5

 

Pour commencer, petit éclaircissement pour ceux qui ne connaissent pas:

Qu'est-ce que Symfony ?

Symfony est un Framework PHP5. A ne pas confondre avec un CMS !

Symfony permet d'avoir une base solide et performante pour concevoir rapidement des sites web avancés.

Voici quelques fonctionnalités clés par défaut dans le framework:

  • Sécurité: Contrôle des logs, XSS, CSRF (protection par defaut), SQL Injection gérés par défaut.
  • Gestion des environnements: Mode développement, production ...
  • Tests unitaires et fonctionnels
  • Configurabilité et extensibilité
  • MVC: Modèle Vue Contrôleur très poussé (Bien plus puissant que Zend ou autre Framework PHP5)
  • Admin Generator: Générez l'administration du site en quelques commandes !
  • Outils pour le développeur: Barre de logs, configuration, session... Debug très avancé.
  • Gestion du cache: Moteur de cache interne permettant d'augmenter les performances du site
  • URL Propres: URL Rewriting par défaut avec un système de routage très évolué.
  • Internationalisation
  • Support avancé des formulaires: Création de formulaire avancé, validateurs ...
  • ORM: On arrive au point qui nous intéresse !

Ce n'est qu'un résumé brief, je pense que je ferais un billet complet sur le Framework.

 

Qu'est-ce qu'un ORM ?

Un ORM (Object-Relational Mapping) est une technique permettant de lier un objet à une base de données relationnelle.

A titre d'exemple, en PHP 5 (Orienté Objet), nous aurons un Objet Membre qui sera directement lié à une table Membre.

Ainsi l'objet est directement lié et permet de mettre en place des méthodes qui vous simplifieront la vie pour créer, modifier, récupérer et supprimer des informations...

Ce concept existe dans beaucoup de langages, et en PHP5, il existe notamment 2 frameworks d'ORM qui sont:

 

ORM PHP5 - Propel  et       ORM PHP5 - Doctrine

 

Ce sont ces deux Frameworks qui sont proposés dans Symfony.

On ne peut en utiliser qu'un seul par projet web, il faut donc choisir l'un des deux ... d'où l'objectif de ce billet, vous aider à choisir celui qui vous conviendra le mieux !

 

Différences entre Propel et Doctrine

1) Génération de code

Propel: Il va générer du code pour les méthodes et requêtes

Doctrine: "Introspection" du code

Avantage: Propel, car on a une trace du code généré, pratique pour le debug.

 

2) Optimisation des requêtes

Propel: Récupère plus facilement l'objet complet qu'une seule partie des informations

Doctrine: Facilité d'optimisation des données à récupérer etc. Plus rapide au développement.

Avantage: Doctrine

 

3) Performances de l'ORM

Avantage: Propel, il est plus rapide que Doctrine sur une même requête mais pas lorsqu'il y'a gestion de cache.

 

4) L'ORM dans Symfony

Propel: Depuis la première version, Symfony utilise Propel comme ORM (Ancré dans la version 1.0 puis sorti du core à partir de la version 1.1)

Doctrine: Plus récemment proposé dans Symfony (Version 1.1)

Avantage: Doctrine, c'est l'avenir dans Symfony, dès la version 2.0, seul doctrine sera utilisé. Sensio a embauché le lead développeur de Doctrine récemment, cela va de soi qu'il sera bien plus optimisé avec Doctrine dans les prochaines versions à venir.

 

5) Mon avis perso

Propel: Très bien pour les requêtes basiques, comme récupérer des objets avec des clause where et join. Mais beaucoup moins lorsque les requêtes sont avancées avec des Count, Group by etc...

La syntaxe de Propel est assez lourde je trouve à comparer avec Doctrine.

Doctrine: Je l'utilise que depuis peu, mais j'en suis plutôt content. La syntaxe est très simple. On a plus de liberté sur les requêtes qu'avec propel.

Avantage: Doctrine. Comme le grand chef de Symfony, je privilégierai plus Doctrine pour mes prochains projets web.

 

Pour conclure sur le choix de l'ORM:

Propel fonctionne très bien et un site qui tourne sous propel n'a pas besoin d'être migré sous Doctrine.

Mais si vous démarrez un nouveau projet Symfony, optez plutôt pour Doctrine qui sera bientôt le seul ORM géré par Symfony (Dès la version 2.0 en fin d'année 2009).

Un conseil, mettez vous à Symfoniser si ce n'est pas encore fait, vous ne le regretterez pas !

 

Site officiel de Symfony

Tutorial Symfony utilisant Propel

Tutorial Symfony utilisant Doctrine

Baraguiné par ipatate le 19/03/09 à 14h08
ipatate sur La Ferme du Web
J'ai fait le tutoriel proposé à Noel pour apprendre Symfony (sur leur site), et franchement c'est top comme systeme et ça fait gagné du temps (ex: générer le backoffice peut se faire en quelques lignes de code !!!), le seul soucis c'est qu'il faut un hebergement avec acces ssh en root et ça c'est pas tous les hebergeurs qui le propose, du coup pour l'instant je bosse sur Zend (pas mal aussi mais pas aussi rapide en développement que symfony)...
Baraguiné par DJo le 19/03/09 à 14h37
DJo sur La Ferme du Web
Non pas du tout, il y'a une version standalone de Symfony qui s'appelle Symfony Sandbox où tu n'as juste à uploader tes fichiers sur FTP pour que le framework fonctionne :)
Baraguiné par le 19/03/09 à 15h24
très bon article
Baraguiné par ipatate le 20/03/09 à 10h58
ipatate sur La Ferme du Web
@Djo merci je ne connaissais pas Sandbox, je vais pouvoir bosser avec symfony maintenant sans prendre un hebergement trop cher...
Baraguiné par le 27/04/09 à 23h40
merci pour l'article, ca fait longtemps que je pose la question .mais qd j'ai lu l'article, j'ai eu ma reponse ;-)
merci une autre fois
Baraguiné par grenoult le 14/08/09 à 14h22
grenoult sur La Ferme du Web
Sympa ton point de vue sur la différence Propel/Doctrine.

Personnellement j'utilise Propel depuis que j'ai commencé à étudier Symfony, mais ça reste relativement complexe voir tordu pour des requêtes moins simple (COUNT, MIN,MAX etc.).

En suivant ton conseil j'ai commencé à développer mon nouveau projet sous Doctrine, on verra bien ce que ça donne...

Cependant, Doctrine ne sera pas le SEUL orm géré par Symfony! Ce sera celui par défaut, mais pas l'unique.

Source : http://www.symfony-project.org/blog/2009/06/11/new-in-symfony-1-3-what-s-up-with-propel-and-doctrine

Et merci pour ton point de vue :)
Baraguiné par le 07/10/09 à 21h05
excellent article. Je suis un développeur web et j'apprécie trop ce site.il est l'un de mes favoris.
j'aimerais bien utiliser "symfony virtual machine" et le probleme est que le lien du site officiel ne fonctionne pas http://sipx.ws/
Prière si vous avez une autre source pour télécharger et merci d'avance.
Baraguiné par jacomark le 05/05/15 à 13h41
jacomark sur La Ferme du Web
Si vous avez besoin de comparer les versions les plus récentes de Doctrine2 et de Propel 2, vous pouvez les trouver ici: http://www.vertabelo.com/blog/technical-articles/side-by-side-doctrine2-and-propel-2-comparison

Dans cet article, il n'y a pas de recommandation suivant laquelle un ORM serait meilleur que l'autre, mais il y a un comparatif de leurs caractéristiques principales. C'est certainement utile.

Ajouter un Commentaire

Pour poster un commentaire, vous devez être identifié. Vous pouvez choisir parmi ces trois méthodes d'identification:

Compte la Ferme du Web

Identifiez-vous
Inscrivez-vous

Compte Facebook

Connexion avec Facebook

Compte Twitter

Connexion avec votre compte twitter
Rechercher sur la Ferme du web