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

9.13. Trabajar con la base de datos en Drupal

04/05/2025, by Ivan

Es un caso común ejecutar consultas MySQL durante el desarrollo de módulos en Drupal. Aunque se recomienda utilizar entityQuery siempre que sea posible, en ocasiones es necesario realizar consultas SQL para obtener datos más complejos.

Puedes guardar esta página en tus marcadores como una hoja de referencia para ejecutar consultas MySQL de tipo select, insert, update y delete en Drupal.

Select

Obtener un único valor:

$query = \Drupal::database()->select('node_field_data', 'n');
$query->addField('n', 'nid');
$query->condition('n.title', 'About Us');
$query->range(0, 1);
$nid = $query->execute()->fetchField();

Obtener un registro como array:

$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->condition('n.type', 'page');
$query->range(0, 1);
$vegetable = $query->execute()->fetchAssoc();

También puedes utilizar ->fetchObject() o ->fetchAll() para obtener objetos.

Usar LIKE en una consulta:

$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->condition('n.type', 'page');
$query->condition('n.title', $query->escapeLike('About') . '%', 'LIKE');
$vegetable = $query->execute()->fetchAllKeyed();

Consulta con JOIN:

$query = \Drupal::database()->select('node_field_data', 'n');
$query->fields('n', ['nid', 'title']);
$query->addField('u', 'name');
$query->join('users_field_data', 'u', 'u.uid = n.uid');
$query->condition('n.type', 'page');
$vegetable = $query->execute()->fetchAllAssoc('nid');

A continuación se presentan ejemplos de otras consultas como insert, update, upsert y delete. Estas pueden ser útiles si trabajas con tablas personalizadas. Aunque es preferible usar la API de Drupal o módulos contribuidos, si decides realizar consultas personalizadas, aquí tienes algunos ejemplos:

Insert

$query = \Drupal::database()->insert('flood');
$query->fields([
  'event',
  'identifier'
]);
$query->values([
  'My event',
  'My identifier'
]);
$query->execute();

Puedes llamar a values() múltiples veces para insertar varios registros a la vez.

Update

$query = \Drupal::database()->update('flood');
$query->fields([
  'identifier' => 'My new identifier'
]);
$query->condition('event', 'My event');
$query->execute();

Upsert

$query = \Drupal::database()->upsert('flood');
$query->fields([
  'fid',
  'identifier',
]);
$query->values([
  1,
  'My identifier for upsert'
]);
$query->key('fid');
$query->execute();

El método key() se usa para especificar el campo que servirá como clave para determinar si se actualiza o se inserta un nuevo registro. Este campo debe ser único, como nid, uid, tid, fid, etc.

Delete

$query = \Drupal::database()->delete('flood');
$query->condition('event', 'My event');
$query->execute();

¡Eso es todo! Si necesitas más ejemplos, escríbelo en los comentarios. En los próximos tutoriales veremos cómo usar estas consultas personalizadas en la práctica dentro de Drupal.