DataBaseWhere
La clase DataBaseWhere
en FacturaScripts se utiliza para filtrar resultados en los métodos all(), count() y loadFromCode() de los modelos. Podemos pasar un array de DataBaseWhere
a estos métodos para aplicar los filtros que deseemos.
Introducción a la Clase
Para utilizar DataBaseWhere
, primero debemos asegurarnos de cargar la clase:
use FacturaScripts\Core\Base\DataBase\DataBaseWhere;
Constructor de DataBaseWhere
- fields: Nombre del campo sobre el que se realiza el filtro. Puede ser una lista, como
'campo1|campo2|campo3'
. - value: Valor por el cual se filtra. También puede comparar con otro campo usando el prefijo
field:
. - operator: (opcional)
'='
por defecto. Operadores permitidos:=
,<
,>
,<=
,>=
,!=
,IN
,NOT IN
,IS
,IS NOT
,LIKE
,XLIKE
,REGEXP
. - operation: (opcional)
'AND'
por defecto. Operadores lógicos:AND
,OR
. Importante: esta operación se aplica al propio elemento, no al siguiente.
Ejemplo: Obtener productos de la familia 1234
$productoModel = new Producto();
$where = [new DataBaseWhere('codfamilia', '1234')];
$productos1234 = $productoModel->all($where);
Este código devuelve todos los productos que pertenecen a la familia 1234.
Ejemplo: Stock por debajo del mínimo
$stockModel = new Stock();
$where = [new DataBaseWhere('cantidad', 'field:stockmin', '<')];
$stockMinimo = $stockModel->all($where);
Ejemplo: Facturas de un cliente en diciembre de 2020
$facturaModel = new FacturaCliente();
$where = [
new DataBaseWhere('codcliente', '1'),
new DataBaseWhere('fecha', '01-12-2020', '>='),
new DataBaseWhere('fecha', '31-12-2020', '<='),
];
$facturasDiciembre = $facturaModel->all($where);
Ejemplo: Contar facturas sin pagar de un cliente
$facturaModel = new FacturaCliente();
$where = [
new DataBaseWhere('codcliente', '1'),
new DataBaseWhere('pagada', false),
];
$numero = $facturaModel->count($where);
Ejemplo: Variantes con referencia o código de barras 666
$varianteModel = new Variante();
$where = [new DataBaseWhere('codbarras|referencia', '666')];
$variantes666 = $varianteModel->all($where);
Ejemplo: Borrar clientes sin teléfono o con email admin@admin.com
$clienteModel = new Cliente();
$where = [
new DataBaseWhere('telefono1', ''),
new DataBaseWhere('email', 'admin@admin.com', '=', 'OR'),
];
foreach($clienteModel->all($where) as $cliente) {
$cliente->delete();
}
El operador OR
se aplica aquí al segundo elemento.
Uso de Operadores
Operador IS e IS NOT
$where = [new DataBaseWhere('nombre', null)];
// RESULTADO: where nombre IS NULL
$where = [new DataBaseWhere('nombre', null, 'IS')];
// RESULTADO: where nombre IS NULL
$where = [new DataBaseWhere('nombre', null, 'IS NOT')];
// RESULTADO: where nombre IS NOT NULL
Operador IN y NOT IN
$where = [
new DataBaseWhere('codejercicio', '2018'),
new DataBaseWhere('codcuentaesp', 'IVAREX,IVAREP,IVARRE', 'IN'),
];
// RESULTADO: where codejercicio = '2018' and codcuentaesp in ('IVAREX','IVAREP','IVARRE')
$where = [new DataBaseWhere('codcliente', "select codcliente from contactos where codpais = 'ESP'", 'IN')];
// RESULTADO: where codcliente IN (select codcliente from contactos where codpais = 'ESP')
Operador LIKE
$where = [new DataBaseWhere('nombre', 'sanchez', 'LIKE')];
// RESULTADO: where nombre LIKE '%sanchez%'
Buscar al principio o al final:
- Al principio:
'sanchez%'
- Al final:
'%sanchez'
Operador XLIKE
Este operador permite buscar múltiples palabras. Por ejemplo:
$where = [new DataBaseWhere('descripcion', 'gran caja', 'XLIKE')];
// RESULTADO: where (descripcion LIKE '%gran%' AND descripcion LIKE '%caja%')