orm symfony doctrine2 propel

¿Qué ORM usar con Symfony2?



doctrine2 propel (3)

Puedo decirte que Propel es el ORM más adecuado para usar con Symfony2. No estoy de acuerdo. Doctrine2 es un ORM nativo para Symfony. Está contenido en la distribución estándar de Symfony disponible aquí: http://symfony.com/download

La documentación de Symfony describe que se trabaja principalmente con Doctrine, no con Propel. Por lo tanto, no creo que la elección de Propel sea demasiado obvia. Creo que deberías realmente pesar las consecuencias. Preferiría Doctrine.

Aquí hay una lista de opciones, respaldada por Propel bundle: http://www.propelorm.org/cookbook/symfony2/working-with-symfony2.html

Estoy comenzando un nuevo proyecto con Symfony2 y no estoy seguro de qué ORM elegir. He oído algunas cosas malas sobre Doctrine2, especialmente cuando se trata de herencia y DQL. Parece que Propel ha vuelto de la muerte, pero, por otro lado, no hay garantía de que dure para siempre.

Tienes algún consejo ?


Mi elección personal es Doctrine 2 por algunas razones:

  • Conceptualmente, es muy fácil de entender. Trabajar con entidades y el administrador de la entidad es simple. Me encanta cómo las entidades no necesitan extender ninguna clase de modelo base (como en Doctrine 1).

  • Es una especie de ORM estándar para Symfony2 en este momento. Si bien Symfony2 no lo respalda oficialmente, es lo que la mayoría de la gente está usando y, por lo tanto, existe una gran cantidad de información en línea. El valor de esto es tremendo.

Menciona que ha escuchado "cosas malas sobre Doctrine2": es importante que se dé cuenta de que ningún ORM será perfecto. Me he encontrado con algunos problemas, pero siempre que pienses de forma creativa, puedes encontrar una solución. A veces esa solución significa escribir SQL sin formato, sin importar lo que puedan decir los puristas de ORM. No me he encontrado con ninguna situación en la que lamentara usar Doctrine 2.

Pasé mucho tiempo mirando a Propel, pero no me gustó cómo funcionó. Eso no quiere decir que es una biblioteca mal programada, pero para mí personalmente no era una buena opción. Pero dado que cada desarrollador es diferente, el mejor consejo que puedo ofrecer es que consulte los ejemplos de documentación y uso para ambas bibliotecas. Como usted va a usarlo, y no nosotros, debe elegir la biblioteca de la que cree que se beneficiará más.


Puedo decir que Propel es el ORM más adecuado para usar con Symfony2. Funciona bien y no hay plan para detener las actividades en él. El proyecto Propel2 está en camino de ser mejor que Propel 1.6.x (que es realmente genial).

¡No dude en utilizar Propel, muchos usuarios, incluidos Sensio Labs, lo están usando!

Aquí está el documento de Propel para Symfony2: http://www.propelorm.org/documentation/#working_with_symfony2

Nota: Hay un tema relacionado en Stack Exchange: https://softwareengineering.stackexchange.com/questions/48760/should-i-choose-doctrine-2-or-propel-1-5-1-6-and-why / 117078 # 117078

Algunos puntos que olvidé:

  • Los comportamientos son parte de Propel, nadie proporcionado en Doctrine2. Eso significa que Propel los apoya oficialmente y brinda soporte / mejoras. No estoy seguro acerca de los de Doctrine.
  • Propel es realmente rápido. Estoy de acuerdo en que Doctrine2 es mejor que Propel para las inserciones masivas.
  • Propel tiene 10 años, es estable y lo usan muchas personas.
  • No hay otro idioma más para aprender con Propel.
  • Propel2 está realmente orientado a objetos, gracias a las API fluidas.
  • Doctrine2 ORM no comparte la misma API con ODM, por lo que puede usar Propel con D2 ODM como D2 ORM y ODM, no hay pros aquí.
  • Propel utiliza la generación de código para plataformas específicas, por lo que está optimizado para sus necesidades, y rápido gracias a partes de tiempo de ejecución y generador.

Algunos puntos que me gustan en Doctrine2:

  • Anotaciones
  • El código completo porque es bastante reciente.

El problema no es sobre Doctrine DBAL sino más sobre Doctrine ORM. Y Propel2 está en camino de mejorar todo el código de Propel 1.6.x.

Ah, y usé Doctrine2 durante mucho tiempo;)