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
18/06/2025, by Ivan

Para agregar una cláusula WHERE en una consulta dinámica, use el método condition():

$query->condition('bundle', 'article', '=');

El código anterior instruye a la consulta a filtrar resultados al conjunto de artículos. Tenga en cuenta que el nombre del campo aquí debe ser un alias creado por los métodos addField() o addExpression().

Parámetros de Condition

El método condition() acepta tres parámetros:

  • $field - el campo a comparar (obligatorio).
  • $value - el valor a comparar (opcional, por defecto NULL).
  • $operator - el operador de comparación (opcional, por defecto ‘=’)

Operadores soportados

Los operadores comunes de comparación '=', '<>', '<', '<=', '>', '>=' son soportados en todos los tipos de bases de datos compatibles.

Uso de IN, NOT IN

Los operadores IN y NOT IN aceptan un arreglo en $value y comparan el valor del campo contra los valores del arreglo.

$users = [2,5,17,22];
$query->condition('uid', $users, 'IN');

En este ejemplo la consulta devolverá registros donde uid sea 2, 5, 17 o 22.

Uso de BETWEEN y NOT BETWEEN

Los operadores BETWEEN y NOT BETWEEN aceptan un arreglo de dos valores para comparar.

$query->condition('count', [5,10], 'BETWEEN');

En este ejemplo la consulta devolverá registros con count entre 5 y 10.

Uso de IS NULL, IS NOT NULL, EXISTS y NOT EXISTS

Por convención, use lo siguiente en lugar de condition():

$query->isNull($field);
$query->isNotNull($field);
$query->exists($field);
$query->notExists($field);

Aunque una condición como $query->condition($field, NULL, 'IS NOT NULL'); debería funcionar, se recomienda seguir la convención mencionada arriba.

Otros operadores

Otros operadores, como BINARY u otros específicos de la base de datos usada, pueden funcionar o no. Tenga esto en cuenta al desarrollar módulos que puedan usarse en diferentes sistemas.

Uso de múltiples Conditions

Puede agregar múltiples llamadas a condition() para filtrar aún más la consulta.

$query->condition('bundle', 'article', '=');
$query->condition('status', 1, '=');

Si hay varias condiciones, como en el ejemplo anterior, todas deben cumplirse para que un registro aparezca en el resultado (es decir, las condiciones se combinan con AND).

Consejo: Para obtener una consulta con solo condiciones OR, use un orConditionGroup.

Grupos de Conditions

Los grupos de condiciones permiten construir expresiones WHERE más complejas (incluyendo OR) en la consulta. Existen dos tipos de grupos de condiciones:

  • orConditionGroup - devuelve un objeto de condiciones combinadas con OR
  • andConditionGroup - devuelve un objeto de condiciones combinadas con AND

Los grupos de condiciones devuelven un objeto que luego puede añadirse como condición a la consulta.

// Crear el orConditionGroup
$orGroup = $query->orConditionGroup()
  ->condition('promoted', 1)
  ->condition('uid', [2,4,7,22], 'IN');
  
// Añadir el grupo a la consulta.
$query->condition($orGroup);

En este ejemplo, las condiciones para promoted y uid se añaden a la cláusula WHERE agrupadas con OR. Esto producirá un WHERE como el siguiente:

WHERE (promoted = 1 OR uid IN (2,4,7,22))

Puede añadir múltiples grupos orConditionGroup y andConditionGroup según sea necesario. Los grupos de condiciones pueden anidarse para necesidades más complejas de la cláusula WHERE.

Considere la siguiente cláusula WHERE:

WHERE (a = 1 OR b = 1) AND ((c = 1 AND d = 1) OR (e = 1))

Las condiciones de la consulta pueden escribirse usando grupos de condiciones así:

$orGroup1 = $query->orConditionGroup()
  ->condition('a', 1)
  ->condition('b', 1);
  
$andGroup1 = $query->andConditionGroup()
  ->condition('c', 1)
  ->condition('d', 1);
  
$orGroup2 = $query->orConditionGroup()
  ->condition($andGroup1)
  ->condition('e', 1);
  
$query->condition($orGroup1);
$query->condition($orGroup2);

 

Source URL:
Source authors:

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.