Cuando trabajas con bases de datos en CodeIgniter 4, tarde o temprano te enfrentas a consultas SQL cada vez más complejas. Aunque escribir SQL directamente funciona, no siempre es la mejor opción en términos de mantenibilidad, seguridad y escalabilidad.
Aquí es donde entra en juego el Query Builder, una herramienta poderosa que te permite construir consultas de forma programática usando programación orientada a objetos.
¿Qué es Query Builder y por qué usarlo?
El Query Builder es una clase de CodeIgniter 4 que te permite crear consultas SQL sin escribirlas directamente. En lugar de eso, utilizas métodos encadenados para construirlas paso a paso.
Ventajas clave:
- Código más limpio y legible
- Menor riesgo de inyección SQL
- Reutilización de lógica
- Mayor facilidad para consultas complejas
Primera consulta con Query Builder
En lugar de escribir algo como:
SELECT * FROM productos;
Puedes hacerlo así:
$query = $db->table('productos')->get();
Para obtener resultados:
$resultado = $query->getResultArray();
O si prefieres objetos:
$resultado = $query->getResult();
Ver la consulta generada
Una gran ventaja es que puedes inspeccionar la consulta SQL generada:
echo $db->getLastQuery();
Esto es muy útil para depurar errores o entender qué está ejecutando realmente el sistema.
Seleccionar columnas específicas
Por defecto, Query Builder usa SELECT *, pero puedes especificar columnas:
$query = $db->table('productos')
->select('id, codigo, nombre, stock')
->get();
Aplicar filtros con WHERE
Filtro básico:
$query = $db->table('productos')
->where('estatus', 1)
->get();
Múltiples condiciones (AND automático):
$query = $db->table('productos')
->where('estatus', 1)
->where('stock >', 5)
->get();
Usando array:
$condiciones = [
'estatus' => 1,
'stock >' => 5
];
$query = $db->table('productos')
->where($condiciones)
->get();
Usando cadena (más flexible):
$query = $db->table('productos')
->where("estatus = 1 AND stock > 5")
->get();
Ordenar resultados (ORDER BY)
$query = $db->table('productos')
->orderBy('nombre', 'ASC')
->get();
También puedes usar 'DESC' para orden descendente.
Limitar resultados (LIMIT)
$query = $db->table('productos')
->limit(1)
->get();
Ideal para paginación o consultas específicas.
Consultas más avanzadas: JOIN entre tablas
Supongamos que tienes dos tablas:
productosalmacen
Y quieres obtener el nombre del almacén junto con cada producto.
Ejemplo con INNER JOIN:
$sql = $db->table('productos');
$sql->select('
productos.id as id_producto,
productos.codigo,
productos.nombre,
productos.stock,
almacen.nombre as almacen
');
$sql->join(
'almacen',
'productos.id_almacen = almacen.id'
);
$query = $sql->get();
$resultado = $query->getResultArray();
Evitar conflictos de columnas
Cuando haces JOIN, es común que existan columnas con el mismo nombre (como id o nombre).
La solución es usar alias:
productos.id as id_producto
almacen.nombre as almacen
Esto evita ambigüedades y errores en los resultados.
Tipos de JOIN disponibles
Puedes cambiar el tipo de JOIN fácilmente:
$sql->join('almacen', 'productos.id_almacen = almacen.id', 'left');
Opciones disponibles:
inner(por defecto)leftright
Debugging: tu mejor aliado
Si algo falla en tu consulta:
- Imprime la query:
echo $db->getLastQuery(); - Copia y ejecútala en tu gestor (por ejemplo, phpMyAdmin)
Esto te permitirá detectar errores rápidamente.
Funciones adicionales del Query Builder
El Query Builder tiene muchas más funciones avanzadas:
like()→ búsquedas parcialescountAllResults()→ contar registrosselectMax(),selectMin(),selectAvg()→ funciones agregadasgroupBy()→ agrupaciónhaving()→ filtros post-agrupación
Puedes explorar todas en la documentación oficial de CodeIgniter 4.
Guía en Vídeo
Conclusión
El Query Builder de CodeIgniter 4 es una herramienta esencial si quieres llevar tus consultas SQL a un nivel más profesional.
Te permite:
- Construir consultas complejas fácilmente
- Mantener tu código limpio
- Escalar tu aplicación sin caos
Si ya sabes SQL, esto no lo reemplaza… lo potencia.
