Query Builder en CodeIgniter 4

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:

  • productos
  • almacen

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)
  • left
  • right

Debugging: tu mejor aliado

Si algo falla en tu consulta:

  1. Imprime la query: echo $db->getLastQuery();
  2. 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 parciales
  • countAllResults() → contar registros
  • selectMax(), selectMin(), selectAvg() → funciones agregadas
  • groupBy() → agrupación
  • having() → 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.