En ocasiones, necesitamos hacer una consulta a la base de datos de Drupal 8, y obtener ciertas informaciones.
En este día, te enseñaré a realizar de dos maneras consultas a la base de datos de Drupal.
Para esto, necesitaremos instalar estos módulos:
https://www.drupal.org/project/devel
https://www.drupal.org/project/devel_php
Una vez instalados estos módulos, activaremos todos los módulos relacionados con el devel.
Luego iremos a la siguiente ruta: tudrupal/devel/php.
y en este cuadro realizaremos lo siguiente:
//Creamos una variable con la conexión a la base de datos.
$connection = \Drupal::database();
//Hacemos una consulta a la base de datos.
$query = $connection->query("SELECT * FROM {node} limit 5");
//Obtenemos los resultados de la consulta en la variable $result
$result = $query->fetchAll();
//hacemos uso de la función ksm que viene con el modulo devel llamado Devel Kint.
ksm($result);
Nota: si al ejecutar ksm, no muestra ninguna información, entonces debes hacer los siguientes ajustes si usas XAMPP para hacer estas pruebas.
Si te funcionó correctamente, entonces debe aparecer algo como esto:
Como podemos observar, con la función ksm podemos los primeros 5 registros que están en la tabla node.
Ahora vamos a explicar cada una de las sintaxis:
$connection = \Drupal::database();
Con el código anterior, creamos una variable llamada $connection, el cual va a tener la conexión a la base de datos de Drupal.
$query = $connection->query("SELECT * FROM {node} limit 5");
Con el código anterior le decimos a Drupal, que con la función query que tiene la variable $conecction, haremos nuestra consulta SQL.
Quiero destacar que en el código anterior, veremos que el nombre de la tabla está con {}.
¿Por qué hacemos esto así?
Porque a veces, ponemos en la instalación de Drupal, que comience con un prefijo en cada tabla, y poniendolo entre llaves, nos olvidamos del prefijo.
$result = $query->fetchAll();
Con el código anterior, pasamos a la variable $result, la información obtenida de la tabla.
ksm($result);
Con el código anterior, usamos la función KSM para poder ver la información que tiene la variable result.
Para acceder a los datos que están en la variable $result, solo basta recorrer esta variable:
Un ejemplo sería:
foreach ($result as $record) {
ksm($record);
dpm($record->nid);
}
En el código anterior, vemos con KSM la información que tiene la variable $record, y con la función DPM del módulo devel, podemos ver el valor que tiene el campo nid.
Si quieremos ver otro campo, solo basta cambiar NID por el campo que quieres y listo.
Otra manera de poder realizar consultas sql, es a través del API de Drupal.
// Creamos la variable $connection que contiene la conexión a la base de datos de Drupal.
$connection = \Drupal::database();
// Con la función select, procedemeos a decirle el nombre de la tabla que queremos y una letra que represente esa tabla
$query = $connection->select('users', 'u');
// Agregamos una condicción indicando que queremos todos los usuarios donde el campo uid sea diferente al id 0
$query->condition('u.uid', 0, '<>')
//aquí ponemos todos los campos que queremos obtener.
->fields('u', ['uid', 'langcode', 'uuid'])
//aqui ponemos el rango de datos que queremos mostrar.
->range(0, 5);
//obtenemos en la variable $result la información de los campos.
$result = $query->execute()->fetchAll();
//mostramos con KSM la información contenida en el campo $result.
ksm($result);
Cada linea está comentada.
Si quieren saber mas, no duden en escribirme.
Un saludo y Dios les bendiga.