php orm symfony1 doctrine propel

ORM PHP: Doctrine vs. Propel



symfony1 (9)

Cabe señalar que Doctrine 2 se encuentra actualmente en desarrollo released [ed] y funciona de forma casi completamente diferente a la versión estable actual de Doctrine 1. Se basa en el patrón Data Mapper en lugar de Active Record, y utiliza un "entity manager" para manejar la persistencia lógica. Cuando se lance se asemejará más a Hibernate de Java (Doctrine 1 se parece más a ActiveRecord de Rails).

He estado desarrollando con el lanzamiento alfa de Doctrine 2, y debo decir que está muy por encima de Doctrine 1 (solo mi opinión, y nunca he usado Propel). Es probable que la comunidad de Doctrine avance hacia ella cuando se lance.

Te animo a que revises Doctrine, pero si prefieres el estilo Active Record que usan Propel y Doctrine ahora, es mejor que te quedes con Propel.

Estoy comenzando un nuevo proyecto con symfony que se integra fácilmente con Doctrine y Propel , pero por supuesto necesito hacer una elección ... Me preguntaba si la gente más experimentada tiene pros y / o contras generales para ir con cualquiera de estos dos?

Muchas gracias.

EDITAR: Gracias por todas las respuestas, cosas útiles. No hay una respuesta verdaderamente correcta a esta pregunta, así que solo marcaré como aprobada la que obtuvo los votos positivos más populares.


Iría con Doctrine. Me parece que es un proyecto mucho más activo y, al ser el ORM predeterminado para Symfony, es mejor admitido (aunque oficialmente los ORM se consideran iguales).

Además, me gusta más la forma en que trabajas con consultas (DQL en lugar 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 implementación de Doctrine es mucho más intuitiva para mí).

Además, realmente prefiero la forma en que administras las relaciones en Doctrine.

Creo que vale la pena leer esta página de la documentación de Doctrine: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained

Para resumir: si estuviera comenzando un nuevo proyecto o tuviera que elegir entre aprender Doctrine y Propel, iría a Doctrine cualquier día.


Las dos referencias son un poco anticuadas por lo que sin embargo cubre algunas generalidades, básicamente tendría que evaluar su experiencia con el marco como tal, un inconveniente importante de la doctrina es la incapacidad de tener un IDE que le permita autocodificar en ese propulsor. un ganador, el impulso de las curvas de aprendizaje y la doctrina son muy diferentes, es más fácil impulsarlo, si su proyecto necesitará administrar una doctrina de uso de modelos de datos complejos, si quiere trabajar rápidamente con un ORM mejor documentado y encontrar más apoyo en Propel El uso de Internet es mucho más maduro y creo que el más utilizado.

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



Si no me equivoco, ambos ORM utilizan un esquema basado en XML, y la creación de esta definición de esquema es bastante engorrosa. Si necesita un esquema simple basado en PHP con un estilo fluido. Puede probar LazyRecord https://github.com/c9s/LazyRecord admite la migración automática y los generadores de script de actualización / degradación. Y todos los archivos de clase se generan estáticamente sin costo de tiempo de ejecución.


Soy parcial, ya que ayudo un poco en el próximo lanzamiento de Propel, pero debes tener en cuenta que Propel fue de hecho el primer ORM disponible, luego se retrasó un poco cuando se creó Doctrine, pero ahora tiene un desarrollo activo nuevamente. Symfony 1.3 / 1.4 viene con Propel 1.4, donde la mayoría de las comparaciones se detienen en Propel 1.3. Además, la próxima versión de Propel (1.5) contendrá muchas mejoras, especialmente en la creación de sus Criterios (lo que resulta en menos código para que usted escriba).

Me gusta Propel porque parece ser menos complejo que Doctrine: la mayoría del código está en las pocas clases generadas, mientras que Doctrine ha dividido la funcionalidad en muchas clases. Me gusta tener una buena comprensión de las bibliotecas que estoy usando (no demasiada "magia"), pero por supuesto, tengo más experiencia con Propel, así que tal vez Doctrine no sea tan complicado detrás de escena. Algunos dicen que Propel es más rápido, pero deberías verificar esto por ti mismo, y considerar si esto supera las otras diferencias.

Quizás también deba considerar la disponibilidad de los complementos de Symfony para los diferentes marcos. Creo que Propel tiene una ventaja aquí, pero no sé cuántos de los complementos enumerados aún están actualizados con la última versión de Symfony.


Sugeriría usar DbFinder Plugin . Este es realmente un plugin muy poderoso que soporta ambos, y es bastante poderoso. De hecho, me gusta usarlo mejor que cualquiera de los dos.


Sugeriría usar propel 1.6, que es mejor para la función de autocompletado de IDE.


Todo se reduce a la preferencia personal. Uso Propel porque (entre otras cosas) me gusta el hecho de que todo tiene su propio método getter & setter concreto. En Doctrine, este no es el caso.

Impulsar:

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

Doctrina:

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

La razón por la que me gusta tener getters & setters es que puedo poner todo tipo de lógica en ellos, si es necesario. Pero esa es solo mi preferencia personal.

También debería agregar que, aunque Propel se movía lentamente en el pasado, ahora se encuentra nuevamente en desarrollo activo. Ha lanzado varias versiones nuevas en los últimos meses. La versión más reciente de Propel incluye una "interfaz de consulta fluida" similar a la de Doctrine , por lo que ya no tendrá que usar Criteria si no lo desea.