Extra Block Types (EBT) - Nueva experiencia con Layout Builder❗

Extra Block Types (EBT): tipos de bloques con estilo y personalizables: Presentaciones de diapositivas, Pestañas, Tarjetas, Acordeones y muchos más. Configuraciones integradas para fondo, DOM Box y plugins de JavaScript. Experimenta hoy el futuro de la construcción de diseños.

Módulos de demostración EBT Descargar módulos EBT

❗Extra Paragraph Types (EPT) - Nueva experiencia con Paragraphs

Extra Paragraph Types (EPT): conjunto de módulos basado en párrafos de forma análoga.

Módulos de demostración EPT Descargar módulos EPT

Scroll

Trabajar con bases de datos en Drupal 7 - Lección 1 - API de base de datos de Drupal

12/05/2025, by Ivan

Si has desarrollado módulos para la versión 6 de Drupal, no te costará mucho adaptarte al nuevo Database API de Drupal 7. La nueva API de base de datos funciona sobre la extensión PDO de PHP, lo que le permite operar con varias bases de datos como MySQL, PostgreSQL, MSSQL y posiblemente Oracle. En cuanto a su simplicidad, es discutible, ya que requiere acostumbrarse a la nueva sintaxis, siendo más familiar escribir consultas SQL directamente.

Esto es algo de lo que dice la documentación oficial:

El Database API de Drupal 7 proporciona un nivel estándar e intuitivo de abstracción para el acceso al servidor de base de datos. Esta API fue diseñada manteniendo la sintaxis y potencia de SQL tanto como sea posible, sin embargo, también:

  • Admite múltiples servidores de base de datos fácilmente;
  • Permite a los desarrolladores crear funcionalidades más complejas, como transacciones;
  • Proporciona una interfaz estructurada para construir consultas dinámicamente;
  • Garantiza seguridad y buenas prácticas;
  • Ofrece a los módulos una interfaz limpia para interceptar y modificar las consultas del sitio;
  • La documentación principal del Database API está integrada en los comentarios del código fuente. La sección del handbook se amplía con documentación de la API a modo de introducción para los desarrolladores de módulos que deseen trabajar con servidores de base de datos desde el punto de vista administrativo. El handbook puede no cubrir todas las capacidades de la API.

  • El Database API se creó utilizando conceptos de programación orientada a objetos, y este documento asume al menos un conocimiento parcial de esos conceptos. Sin embargo, la mayoría de las operaciones comunes tienen una forma funcional y los desarrolladores pueden optar por esta forma para escribir su código.

Concepto principal del Drupal Database API

La capa de abstracción de bases de datos (en adelante db layer) de Drupal se basa en la biblioteca PHP PDO. PDO proporciona una API unificada y orientada a objetos para acceder a distintas bases de datos, aunque no ofrece un nivel de abstracción para los diferentes dialectos SQL entre distintos servidores.

Drivers

Dado que cada base de datos requiere distintos métodos de interacción, la capa db de Drupal necesita un driver para cada tipo de base de datos. Un driver está compuesto por una serie de archivos ubicados en includes/database/driver, donde "driver" es una cadena que representa la clave única de ese driver. En muchos casos, esa clave es simplemente el nombre de la base de datos en minúsculas, como "mysql", "pgsql" o "mycustomdriver".

Cada driver incluye varias clases que heredan de clases padre del núcleo de Drupal. Estas clases pueden sobrescribir cualquier comportamiento necesario para una correcta compatibilidad con su base de datos. Las clases de driver siempre siguen la convención de nombrado: el nombre de la clase base seguido por un guion bajo y el nombre del driver en minúsculas. Por ejemplo, la versión específica de InsertQuery para MySQL es InsertQuery_mysql.

Conexión con la base de datos

Una conexión es un objeto de la clase DatabaseConnection, que a su vez hereda de la clase PDO. Cada base de datos conectada por Drupal tiene una única conexión y un objeto asociado. El objeto de conexión puede ser una subclase específica para cada driver.

Para acceder al objeto de conexión se puede hacer lo siguiente:

<?php
$conn = Database::getConnection($target, $key);
?>

Para acceder a la conexión activa actual:

<?php
$conn = Database::getConnection();
?>

Y con esto obtendremos acceso a la conexión activa.

En la gran mayoría de los casos, no será necesario acceder directamente al objeto de conexión. Las funciones de envoltorio se encargarán de ello por ti. Solo tendría sentido hacerlo si necesitas ejecutar consultas complejas entre múltiples bases de datos y no deseas cambiar la conexión activa.

Para establecer la conexión activa, utiliza:

<?php
db_set_active($key);
?>

Consultas a la base de datos

Una consulta es una instrucción SQL que será enviada a través de la conexión a la base de datos. El Database API de Drupal admite seis tipos de consultas: Estática (Static), Dinámica (Dynamic), Inserción (Insert), Actualización (Update), Eliminación (Delete) y Combinación (Merge). Algunas consultas escritas como cadenas SQL pueden utilizarse en lugar del constructor de consultas orientado a objetos. El objeto de consulta hace referencia al constructor que elige el tipo de consulta.

Escritura de consultas

La declaración del objeto se produce como resultado de una consulta SELECT. Este siempre será del tipo DatabaseStatement o posiblemente una subclase de DatabaseStatement. DatabaseStatement extiende la clase PDOStatement.

Drupal utiliza declaraciones preparadas para todas las consultas. Una declaración preparada es una plantilla de consulta en la que los valores se insertan durante la ejecución. En términos de SQL, es un equivalente a un "statement" reutilizable. En PDO, se declara un objeto explícitamente preparado, y al ejecutarse, los valores actuales se insertan en los lugares definidos. Esta declaración puede reutilizarse en nuevas consultas. En la práctica, una declaración y su resultado son sinónimos, aunque solo después de la ejecución.

Drupal no expone directamente el objeto de declaración preparada. En lugar de eso, el programador utiliza un objeto de consulta como cadena sin SQL, seguido de la ejecución.