Pregunta

Estoy empezando un nuevo proyecto con Symfony que se integra fácilmente con el Doctrina y Propel , pero por supuesto que hacer una elección .... me preguntaba si la gente con más experiencia por ahí tienen pros y / o desventajas generales para ir con cualquiera de estos dos?

Muchas gracias.

EDIT: Gracias por las respuestas, todas las cosas útiles. No hay una respuesta realmente correcta a esta pregunta así que voy a Marcar como aprobó el mismo que se ha las más populares up-votos.

¿Fue útil?

Solución

Me gustaría ir con Doctrina. Me parece que se trata de un proyecto mucho más activo y siendo el ORM por defecto de Symfony es mejor soportado (a pesar de que oficialmente los ORM se consideran iguales).

Además Será mejor como la forma de trabajar con consultas (DQL en lugar de Criterios):

<?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();
?>

(aplicación de la doctrina es mucho más intuitivo para mí).

Además, realmente prefiero la forma de gestionar las relaciones en la doctrina.

Creo que esta página de la documentación doctrina es digno de una lectura: http://www.doctrine-project.org/documentation/manual/1_2/en/introduction:doctrine-explained

Para resumir: Si estuviera empezando un nuevo proyecto o tuviera que elegir entre aprender Doctrina y Propel me gustaría ir para cualquier día Doctrina

.

Otros consejos

Soy parcial, ya que ayudo un poco en la próxima versión de Propel, pero hay que tener en cuenta que Propel fue de hecho el primer ORM disponible, entonces se retrasó un poco cuando consiguió creado Doctrina, pero ahora tiene un desarrollo activo de nuevo. 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á una gran cantidad de mejoras, especialmente en la creación de ustedes Criteria (lo que resulta en menos código para escribir).

Me gusta Propel, ya que parece ser menos compleja que la doctrina: la mayoría del código está en las pocas clases generadas, mientras que la doctrina ha dividido esta funcionalidad en un montón de clases. Me gustaría tener una buena comprensión de las bibliotecas que estoy usando (no demasiado "mágica"), pero, por supuesto, tengo más experiencia con Propel, así que tal doctrina no es tan complicado detrás de las escenas. Algunos dicen Propel es más rápido, pero usted debe comprobar esto por sí mismo, y considerar si esta es mayor que otras diferencias.

Tal vez también se debe considerar la disponibilidad de los plugins de Symfony para los diferentes marcos. Creo que Propel tiene una ventaja aquí, pero no sé cuántos de los plugins mencionados siguen siendo puesta al día con la última versión de Symfony.

Todo se reduce a la preferencia personal. Yo uso Propel debido a que (entre otras cosas) me gusta el hecho de que todo tiene su propio captador de hormigón y método setter. En Doctrina, este no es el caso.

Propel:

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

Doctrina:

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

La razón me gusta tener captadores y definidores es que puedo poner todo tipo de lógica en ellos, si necesito. Pero eso es sólo mi preferencia personal.

También me gustaría añadir que a pesar de Propel se mueven lentamente en el pasado, ahora está bajo desarrollo activo de nuevo. Se ha lanzado varias versiones nuevas en los últimos meses. La versión más reciente de Propel incluye una "interfaz de consulta fluidez" similar a la de Doctrina , por lo que no tiene que utilizar criterios más si no quiere.

Debe tenerse en cuenta Doctrina 2 es actualmente en desarrollo lanzado [ed ] y funciona casi completamente diferente de la versión estable actual de la Doctrina 1. Se basa en el modelo de datos Mapper en lugar de Active Record, y utiliza un 'gestor de la entidad' para manejar la lógica de persistencia. Cuando se libera se llevará parecido más cerca de hibernación de Java (Doctrina 1 es más como ActiveRecord de Rails).

he estado desarrollando con la versión alfa de la Doctrina 2, y que decir que es la cabeza y los hombros por encima Doctrina 1 (sólo mi opinión, y yo nunca he usado Propel). Es muy probable que la comunidad Doctrina se moverá hacia ella cuando salga al mercado.

Me animo a revisar la doctrina, pero si usted prefiere el estilo Active Record que Propel y Doctrina utilizan ahora, es posible que desee quedarse sólo con Propel.

Las dos referencias son algo anticuadas por lo que, sin embargo, cubrir algunas generalidades, básicamente, tendría que evaluar su experiencia con el marco como tal, un gran inconveniente a la doctrina es la incapacidad de tener un IDE que le permite auto-código en que Propel es un ganador, las curvas de aprendizaje impulsan y la doctrina son muy diferentes, es más fácil para propulsar, si el proyecto tendrá que gestionar complejo modelo de datos utiliza la doctrina, si desea trabajar rápidamente con un ORM que está mejor documentado y encontrar más apoyo en Internet utiliza Propel, es mucho más maduro y creo que la mayoría utiliza.

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

Yo sugeriría utilizar impulsar a 1,6 que es mejor para la función de autocompletar de IDE.

No soy un usuario de PHP 5 ORM no estructural, pero aquí hay algunos buenos puestos de comparación (en caso de que no los ha visto aún):

http://codeutopia.net/ blog / 2009/05/16 / doctrina-contra-propulsión-2009-actualización /

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

Tanto favorita conlusion hacia la Doctrina como una nueva generación de ORM de Symfony.

Después de usar ambos por un número de años prefiero Propel 2 a Doctrina simplemente en función de cómo construir su lógica de consulta. La doctrina es tan a fondo como se puede conseguir y administrar muchos aspectos de la misma coincida con el nivel de profundidad. Propel me siento tiene una forma más fluida y conducido objeto de construir y gestionar las interacciones de la consulta.

Para mí esto llevó al menos código en el modelo y más estructuras en torno a cómo la lógica puede / se procesará. Esto dio como resultado sólo la construcción a cabo muchas interacciones como funcionalidad común. (Después de todo 90% de lo que va a hacer con una base de datos es sólo va a haber algún grado de operación crud.)

Al final, ambos son de gran alcance, manejable y conseguirá el trabajo hecho. Mis proyectos personales y el uso interés ORM Propel 2 y proyectos futuros, si todavía está escrito en PHP irán por ese camino.

He estado usando tanto sobre una base diaria durante los últimos 3-4 años.

Me gustaría sugerir el uso de DbFinder Plugin . Esto es en realidad un plugin muy potente que soporta ambos, y es un buen poderosa bastante. En realidad me gusta usarlo mejor que cualquiera.

Si no estoy equivocado, ambos ORM utilizan el esquema basado en XML, y la creación de estos definición de esquema es bastante engorroso. Si necesita un esquema sencillo basado en PHP con un estilo fluido. Puede intentar LazyRecord https://github.com/c9s/LazyRecord se admite la migración automática y actualizar / rebaja generadores de secuencias de comandos. Y todos los archivos de clase se generan de forma estática y sin coste en tiempo de ejecución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top