Drupal y Doctrine: mezclando dos paradigmas

JP Juan Pablo Romero Juan Pablo Romero

Juan Pablo Romero

Software Engineer
2 min read.

Una de las características que nos encantan de Drupal es su flexibilidad tanto para el desarrollador como para el usuario. Por esa razón muchos sitios de renombre en internet lo han elegido como gestor de contenidos (CMS) y al tener una comunidad tan activa, la cantidad de módulos y componentes disponibles lo hacen aún más atractivo.



Sin embargo, al momento de desarrollar soluciones más específicas el interior de Drupal, que involucren la creación de nuevas entidades y la consulta permanente de datos, se empiezan a conocer ciertos aspectos poco cómodos para el desarrollador como la capa de abstracción a base de datos (DBAL, Data Base Abstraction Layer ), la cuál aún carece de ciertas características como por ejemplo el soporte real para un conjunto extendido de motores de bases de datos (aunque en Drupal 7 se amplió la cantidad de motores), mejor manejo de la integridad referencial y sobre todo facilidad en la escritura de consultas (sobre todo en Drupal 6).



Buscando una mejor forma de trabajar el acceso a la base de datos con Drupal, decidimos combinar la flexibilidad del reconocido CMS con la potencia del componente

ORM

de

Doctrine

, cuestión que ya se había planteado en Drupal 5 con un

módulo escrito por uno de los líderes del desarrollo de Doctrine

, el cual se tomó como base para hacer las adaptaciones para Drupal 6 y 7.



Ventajas de la implementación

Como se mencionó anteriormente, este tipo de integración es viable en la medida en que el desarrollo sobre Drupal requiera de la creación de entidades específicas para dar soporte a la lógica de negocio (creación de nuevas tablas en la base de datos). Con esto en mente, la forma de declarar los modelos (usando esquemas yaml o construyendo las clases de cero) es mucho más sencilla y clara (no sé si sea un sentimiento generalizado, pero declarar un modelo en Drupal 6 es poco cómodo). A continuación algunas ventajas en el uso de Doctrine + Drupal:



  • Declaración de modelos flexible y sencilla (a través de YAML)

  • Generación automática del modelo de clases

  • Disponibilidad de los comportamientos de Doctrine (sluggable, searchable, soft delete, ....)

  • Event listeners y transacciones

  • Soporte para motores como MySQL, PostgreSQL, Oracle, Informix, SQL Server, entre otros


Desde luego, Doctrine ofrece muchas otras características que también estarán disponibles y facilitarán el trabajo al desarrollador. Para explicar de mejor manera la funcionalidad de esta integración, tomaremos un sencillo ejemplo de cómo traer un listado de todos los usuarios activos del sistema:




// Drupal 6
$sql = "SELECT name, mail FROM {users} WHERE status = 1";
$result = db_query($sql);
while ($row = db_fetch_object($result)) {
// más codigo .....
}


// Drupal 7
$result = db_select('user', 'u')
->fields('u.name, u.mail')
->condition('status', 1, '='))
->execute()
while ($row = $result->fetchAssoc()) {
// mas codigo
}


// Doctrine
$query = Doctrine_Query::create()
->select('u.name, u.mail')
->from('User u')
->where('u.status = ?', 1)
->execute(array(), Doctrine_Core:::HYDRATE_ARRAY);
foreach ($query as $userData) {
// mas código .....
}


Tal vez no sea notable la diferencia entre Drupal 7 y Doctrine para este caso, sin embargo en consultas más complejas se puede apreciar la potencia y utilidad de Doctrine, por ejemplo para obtener los roles de un determinado usuario.



¿ Cómo usarlo ?

Bien, para poder integrar de forma sencilla Doctrine + Drupal hemos dispuesto un módulo para Drupal 7, que provee un módelo básico del esquema de base de datos inicial, se puede descargar de:

https://github.com/juanblo/drupal-doctrine

. Ya lo hemos usado en varios proyectos con muy buenos resultados.



En un próximo post explicaremos con más detalles el módulo y como utilizar las características más atractivas de Doctrine.


Written by Juan Pablo Romero

JP Juan Pablo Romero Juan Pablo Romero

Juan Pablo designs and builds robust software solutions with a focus on performance and usability. His problem-solving skills and attention to detail ensure high-quality and efficient applications.

Newsletter

Subscribe to our newsletter:

Read more

Visualización Camacol

Esta semana estamos lanzando el nuevo portal de Camacol ha sido un proyecto corto en tiempo pero intenso en trabajo.

1 min read.

Visualización Gospel Planet

Acabamos de entregar la segunda fase del proyecto http://gospelplanetonline.com y nos sentimos muy orgullosos del trabajo rea...

1 min read.

Configurar cliente GIT en windows

Para configurar un cliente GIT que permita trabajar con estos repositorios en windows, la guía que mejor resultado nos dio es...

1 min read.

Build Once. Own Forever.