2010-09-22 9 views
8

Si uso un ORM digamos con Zend o Symfony. ¿Es un acuerdo de todo o nada?¿Es ORM todo o nada?

Me gustaría usar el ORM, pero también quiero optimizar el rendimiento en algunos casos y escribir la consulta para llegar al meollo. Entonces, si empiezo a usar un ORM, ¿será difícil hacerlo a la antigua cuando lo incluya en mi proyecto?

+2

Depende del ORM, por ejemplo NHibernate admite [consultas nombradas] (http://www.sidesofmarch.com/index.php/archive/2009/02/11/executing-native-sql-using-nhibernate-named -queries /). – R0MANARMY

+0

¿Qué ORM estabas considerando? –

Respuesta

9

La mayoría de los ORM le permitirán ejecutar consultas adhoc.

+0

'¿Qué ORMs estaba considerando?' Estoy buscando propel y doctrina, al menos por ahora. – jblue

+0

Zend tiene la capacidad de tomar el control de base de datos y simplemente ejecutar consultas en bruto en el db también. Es más importante que coloque todo su código de acceso de db en las clases de modelo para que pueda encontrarlo y actualizarlo más tarde de lo que es simplemente adherirse al orm en mi opinión. –

6

Usando Doctrina es bastante fácil "salir" del ORM. Doctrine le permite escribir consultas de 4 maneras diferentes:

  • DQL. El lenguaje de consulta de Doctrine que viene con todos los beneficios de Doctrine.
  • "raw" DQL ("consultas nativas" en Doctrine2). Esto es similar a DQL, pero permite un poco más de flexibilidad en los comandos (por ejemplo, características específicas de la base de datos). En este modo, deberá especificar un poco más sobre cómo los componentes están relacionados entre sí.
  • SQL, usando el PDO de PHP. Puede usar Doctrine_Connection para obtener una instancia de PDO que le permita escribir consultas, pero aún así tenga la seguridad y facilidad de uso adicionales otorgadas por PDO.
  • SQL en bruto. Aunque no estoy seguro de por qué lo quieres, creo que Doctrine proporciona esto, de lo contrario, siempre podrías salir completamente de Doctrine.

Si está utilizando Doctrine dentro de Symfony, no hay absolutamente ninguna característica de Symfony que lo encierre al usar Doctrine, incluso si está habilitado.

Una advertencia final: si está utilizando algunas de las funciones avanzadas de Doctrine (por ejemplo, eventos o comportamientos), será difícil vincularlas cuando realice consultas fuera de DQL.

+0

'eventos o comportamientos' te refieres a' created_at' y 'updated_at'? – jblue

+0

Si está utilizando el comportamiento 'Timestampable' de Doctrine, no administraría registros insertados fuera de Doctrine. Sin embargo, Doctrine no le impide administrar las marcas de tiempo como lo haría fuera de Doctrine, para empezar. –

0

Puede mezclar y combinar todo lo que quiera. El principal riesgo es la introducción de inconsistencias incompatibles entre sus herramientas. hipotético Ex:

si tengo una entidad Doctrine2 ORM llama un usuario y lo uso Zend_Db_Table cambiar algunos valores entre descargas en la tabla de usuarios, que puede tener algunos efectos secundarios inesperados o comportamiento no deseado.

Cuestiones relacionadas