DbQuery

La clase DbQuery de FacturaScripts permite realizar una amplia variedad de consultas a la base de datos de manera sencilla.

Seleccionar una tabla

Para hacer consultas sobre una tabla, debemos llamar al método table() de la clase DbQuery. Por ejemplo, para obtener todos los registros de la tabla de familias, podemos ejecutar:

use FacturaScripts\Core\DbQuery;

$familias = DbQuery::table('familias')->get();

Con la función get() obtenemos todos los registros y columnas. Si solo queremos algunas columnas, podemos especificarlo con el método select():

$descripciones_familias = DbQuery::table('familias')->select('descripcion')->get();

Filtrar los resultados

Es posible aplicar filtros a la consulta. Por ejemplo, para obtener todos los productos de la familia 123, podemos usar:

// con whereEq aplicamos un filtro de columna = valor
$productos = DbQuery::table('productos')->whereEq('codfamilia', '123')->get();

// también podemos usar un array Where
$productos = DbQuery::table('productos')->where([Where:eq('codfamilia', '123')])->get();

// o con un filtro dinámico
$productos = DbQuery::table('productos')->whereCodfamilia('123')->get();

La clase soporta filtros directos como whereBetween(), whereEq(), whereGt(), whereGte(), whereIn(), whereLike(), whereLt(), whereLte(), whereNotEq(), whereNotIn(), whereNotNull() y whereNull(). También se puede utilizar un array Where para filtros más complejos.

Para mayor comodidad, se pueden aplicar filtros dinámicos usando where seguido del nombre de la columna:

// where codfamilia = '123'
$productos = DbQuery::table('productos')->whereCodfamilia('123')->get();

// where codimpuesto = 'IVA21'
$productos = DbQuery::table('productos')->whereCodimpuesto('IVA21')->get();

Ordenar los resultados

Para ordenar los resultados, se pueden utilizar las funciones orderBy() y orderMulti():

// obtenemos los productos ordenados por precio y stock
$productos = DbQuery::table('productos')
    ->orderBy('precio', 'ASC')
    ->orderBy('stockfis', 'ASC')
    ->get();

// lo mismo, pero con orderMulti()
$productos = DbQuery::table('productos')
    ->orderMulti(['precio' => 'ASC', 'stockfis' => 'ASC'])
    ->get();

Las llamadas a orderBy() y orderMulti() añaden esos parámetros a la consulta, es decir, no reemplazan el orden previo. Si deseamos limpiar o quitar el orden anterior, debemos usar la función reorder().

Obtener el primer resultado

Para obtener solamente el primer resultado de la consulta, utilizamos el método first():

$primera = DbQuery::table('familias')->first();

Obtener el número de registros

Usamos el método count() para obtener el número total de registros en la tabla:

$count = DbQuery::table('familias')->count();

Si necesitamos el número de valores distintos de una columna, por ejemplo, saber a cuántos países distintos hemos vendido material, podemos hacerlo de varias formas:

// opción 1
$numero = DbQuery::table('facturascli')->count('codpais');

// opción 2
$numero = DbQuery::table('facturascli')->selectRaw('DISTINCT codpais')->count();

// opción 3
$data = DbQuery::table('facturascli')->selectRaw('COUNT(DISTINCT codpais) as c')->first();
$numero = $data['c'];

Obtener máximo, mínimo, media, suma...

Podemos realizar operaciones sobre los resultados, como obtener el valor máximo, el mínimo, la media o la suma:

// el máximo precio de los productos
$max = DbQuery::table('productos')->max('precio');

// el mínimo precio de los productos
$min = DbQuery::table('productos')->min('precio');

// el precio medio de los productos
$avg = DbQuery::table('productos')->avg('precio');

// la suma de todos los precios de los productos
$sum = DbQuery::table('productos')->sum('precio');

Podemos aplicar filtros a los resultados antes de llamar a la función:

// el máximo precio de los productos de la familia 123
$max = DbQuery::table('productos')->whereEq('codfamilia', '123')->max('precio');

Insertar registros en la tabla

Para añadir registros a una tabla, utilizamos el método insert():

// creamos el producto 777
DbQuery::table('productos')->insert([
    'referencia' => '777',
    'descripcion' => 'Producto 777',
    'precio' => 7.77
]);

El método insert() permite insertar múltiples registros a la vez:

// creamos los productos 888 y 999
DbQuery::table('productos')->insert([
    ['referencia' => '888', 'descripcion' => 'Producto 888', 'precio' => 8.88],
    ['referencia' => '999', 'descripcion' => 'Producto 999', 'precio' => 9.99],
]);

Actualizar registros en la tabla

Podemos actualizar un registro combinando los métodos whereEq() y update():

// actualizamos el precio y stock del producto 777
DbQuery::table('productos')
    ->whereEq('referencia', '777')
    ->update([
        'precio' => 8,
        'stockfis' => 11,
    ]);

Si no aplicamos ningún filtro where, los cambios se aplicarán a toda la tabla. Por ejemplo, para marcar todos los productos como públicos:

// marcamos todos los productos como públicos
DbQuery::table('productos')
    ->update([
        'publico' => true,
    ]);

Eliminar registros de la tabla

Al combinar los métodos whereEq() y delete(), podemos eliminar un registro específico:

// eliminamos el producto 777
DbQuery::table('productos')
    ->whereEq('referencia', '777')
    ->delete();

También podemos eliminar todos los registros de una tabla omitiendo el filtro where:

// eliminamos todos los productos
DbQuery::table('productos')->delete();
Cookies
Usamos cookies en nuestro sitio web para brindarte la experiencia más relevante recordando tus preferencias y visitas repetidas. Al hacer clic en "Aceptar", aceptas el uso de TODAS las cookies necesarias.
Copyright (c) 2013-2026 FacturaScripts
0.27366s

Soporte