Condiciones
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);
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.