Esta web utiliza cookies propias y de terceros para su funcionamiento. ¿Aceptas? Leer más
Acceso a la base de datos

DataBaseWhere

A menudo al seleccionar, modificar o borrar información de la base de datos necesitamos filtrar los registros con los que queremos trabajar. Este tipo de filtrado en SQL se realiza mediante la cláusula WHERE.

Creación de Filtros

Para crear un filtro where necesitaremos incluir en nuestra clase el uso del espacio de nombres FacturaScripts/Core/Base/DataBase/DataBaseWhere, que nos dará acceso a la clase. Luego simplemente crearemos un array con las condiciones de filtrado que necesitemos, siendo cada una de las condiciones una instancia de la clase DataBaseWhere.

Al crear la instancia debemos informar de los parámetros:

  • fields: Nombre de campo o lista separada por '|' a los que se aplicará el valor.
  • value: Valor por el cual se filtra.
  • operator: (opcional)('=' por defecto) operador aritmético a aplicar: '=', '<', '>', '<=', '>=', '!=', 'IN', 'IS', 'IS NOT', 'LIKE', 'XLIKE', 'REGEXP'
  • operation: (opcional)('AND' por defecto) operador lógico a aplicar: 'AND', 'OR'. Nota: esta operación se aplica al propio elemento, no al siguiente.

Ejemplos:

$where = [new DataBaseWhere('codagente', 'Agente01')];
/// RESULTADO: where codagente = 'Agente01'

$where = [
      new DataBaseWhere('fecha', '01-01-2018', '>='),
      new DataBaseWhere('fecha', '31-12-2018', '<='),
];
/// RESULTADO: where fecha >= '01-01-2018' and fecha <= '31-12-2018'

$where = [
      new DataBaseWhere('codcliente', '181432'),
      new DataBaseWhere('estado', 'Pagado', '!=')
];
/// RESULTADO: where codcliente = '181432' and estado != 'Pagado'

$where = [
        new DataBaseWhere('name', 'MyView'),
        new DataBaseWhere('nick|date', null, 'IS')
];
/// RESULTADO: where name = 'MyView' and nick is null and date is null

$where = [
        new DataBaseWhere('codejercicio', '2018'),
        new DataBaseWhere('codcuentaesp', 'IVAREX,IVAREP,IVARRE', 'IN')
];
/// RESULTADO: where codejercicio = '2018' and codcuentaesp in ('IVAREX','IVAREP','IVARRE')

Operador LIKE

Este operador permite buscar dentro de una cadena de texto:

$where = [new DataBaseWhere('nombre', 'sanchez', 'LIKE')];
/// RESULTADO: where nombre LIKE '%sanchez%'

Podemos buscar solamente al principio o al final gracias al uso del caracter %:

$where = [new DataBaseWhere('nombre', 'sanchez%', 'LIKE')];
/// RESULTADO: where nombre LIKE 'sanchez%'

$where = [new DataBaseWhere('nombre', '%sanchez', 'LIKE')];
/// RESULTADO: where nombre LIKE '%sanchez'

Operador XLIKE

Esta es una variación del operador LIKE, pero con soporte para buscar múltiples palabras. Imaginemos que queremos buscar productos con "gran caja" en la descripción, construimos nuestro LIKE con "gran caja", pero resulta que tenemos productos que en lugar de poner "gran caja" pone "caja grande". La consulta no nos vale. Tendríamos que buscar tanto "gran caja" como "caja gran". Bien, aquí entra el operador XLIKE que realiza precisamente esta operación:

$where = [new DataBaseWhere('descripcion', 'gran caja', 'XLIKE')];
/// RESULTADO: where (descripcion LIKE '%gran%' AND descripcion LIKE '%caja%')