logo

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

Creación del objeto de conexión a la base de datos

19/06/2025, by Ivan

La interacción con la base de datos debe realizarse a través del objeto de conexión a la base de datos. Hay varios escenarios que requieren cierta atención:

1. En código procedural, es decir, archivos *.module, *.inc o scripts:
La mejor manera de crear una instancia del objeto de conexión a la base de datos es a través del Contenedor de Servicios.

Ejemplo:

$database = \Drupal::database();
// O bien
$database = \Drupal::service('database');

Esto resultará en un objeto de conexión a la base de datos configurado para conectarse a la base de datos principal por defecto, según lo definido en la configuración de base de datos en el archivo settings.php.

2. Por razones históricas y técnicas, el tipo devuelto por \Drupal::database() es \Drupal\Core\Database\Connection, por lo que a veces se le denomina $connection.
 
3. En código OOP:

  • En algunos casos, el objeto de conexión a la base de datos ya puede estar disponible como miembro de la clase actual; por ejemplo, muchos plugins y servicios tienen $this->database (o $this->connection) como miembro con la conexión a la base de datos.
  • Si es posible, use la inyección de dependencias (DI) para usar el servicio @database o $container->get('database') para inyectar la conexión a la base de datos.
  • Si no es posible (como en un método estático de clase), use \Drupal::database().
  • Si los servicios aún no están disponibles, \Drupal\Core\Database\Database::getConnection() puede obtener la conexión a la base de datos.
  • En pruebas unitarias, no tenemos un núcleo cargado ni contenedor incorporado. Generalmente las pruebas unitarias no deberían acceder a la base de datos. Una prueba unitaria que requiere el servicio de base de datos debe convertirse en una prueba de núcleo.
  • En clases del núcleo y pruebas funcionales, tenemos $this->container->get('database'). Algunos autores de pruebas pueden notar que el contenedor referenciado por la clase de prueba puede no estar sincronizado con el contenedor actual durante la solicitud en pruebas funcionales. En este caso, el autor de la prueba puede llamar a $this->rebuildContainer() y luego volver a acceder a $this->container->get('database').

 

Uso de otra conexión a base de datos

Si su sitio usa múltiples bases de datos, para ejecutar una consulta en una base de datos distinta a la predeterminada, use Database::getConnection(). Por ejemplo:

$connection = \Drupal\Core\Database\Database::getConnection('default', 'other_database');

Esto proporcionará una conexión a la base de datos definida en settings.php como:

$databases['other_database']['default']

 

Drupal’s online documentation is © 2000-2020 by the individual contributors and can be used in accordance with the Creative Commons License, Attribution-ShareAlike 2.0. PHP code is distributed under the GNU General Public License.