Funciones de modelos en CodeIgniter 4

En este artículo veremos cómo utilizar los modelos en CodeIgniter 4 para realizar operaciones como consultar, insertar, actualizar y eliminar registros de forma rápida y limpia.

Si ya sabes cómo definir un modelo y asignarlo a una tabla (como vimos en el artículo anterior), ahora aprenderás a usarlo dentro del controlador y aprovechar las funciones que el framework proporciona para trabajar con la base de datos sin escribir grandes consultas SQL.

Arquitectura MVC en CodeIgniter 4

Antes de comenzar, recuerda que CodeIgniter trabaja con el patrón MVC:

  • Modelo (Model) → Maneja la base de datos
  • Vista (View) → Muestra la información al usuario
  • Controlador (Controller) → Conecta el modelo con la vista

En este caso trabajaremos con un controlador llamado Productos, una vista que muestra una tabla de productos y un modelo llamado ProductoModel que está conectado con la tabla productos.

Importar y usar un modelo en el controlador

Para utilizar un modelo dentro de un controlador primero debemos importar la clase usando use.

use App\Models\ProductoModel;

Después podemos crear una instancia del modelo:

$productoModel = new ProductoModel();

Ahora podremos acceder a todos los métodos que el modelo ofrece para interactuar con la base de datos.

Obtener todos los registros con findAll()

Una de las funciones más utilizadas es findAll(), que permite obtener todos los registros de la tabla.

$resultado = $productoModel->findAll();

Esta función realiza internamente una consulta similar a:

SELECT * FROM productos

El resultado dependerá del tipo de retorno configurado en el modelo:

  • array
  • object

Generalmente se usa array, lo que facilita recorrer los resultados en la vista con un foreach.

Obtener un solo registro con find()

Si solo necesitamos un registro específico, podemos usar find().

$producto = $productoModel->find($id);

Esta función devuelve el registro cuyo ID coincide con el valor enviado.

Por ejemplo, si la URL contiene:

/productos/show/2

Entonces find(2) devolverá el producto con ID 2.

En la vista podemos acceder a los datos así:

<?= $producto['nombre'] ?>

Crear una instancia del modelo en el constructor

Una buena práctica es crear la instancia del modelo una sola vez dentro del controlador.

private $productoModel;public function __construct()
{
$this->productoModel = new ProductoModel();
}

De esta forma podremos usar el modelo en cualquier método del controlador con:

$this->productoModel

Insertar registros con insert()

Para insertar datos usamos el método insert(), el cual recibe un arreglo con los valores a guardar.

$data = [
'codigo' => '123456',
'nombre' => 'Computadora',
'precio' => 8000,
'id_almacen' => 1,
'estatus' => 1
];$this->productoModel->insert($data);

Cuando se realiza la inserción:

  • MySQL genera automáticamente el ID
  • CodeIgniter puede agregar automáticamente las fechas de creación

Si imprimimos el resultado:

echo $this->productoModel->insert($data);

Obtendremos el ID del registro insertado.

Obtener el último ID insertado

Si necesitamos el ID generado por la base de datos, podemos usar:

$id = $this->productoModel->getInsertID();

Esto es útil cuando después de insertar necesitamos:

  • crear registros relacionados
  • redirigir a una página de edición
  • mostrar el registro recién creado

Actualizar registros con update()

Para actualizar datos utilizamos update(), que recibe dos parámetros:

  1. ID del registro
  2. Datos a modificar
$data = [
'nombre' => 'Cámara',
'codigo' => 'CAM123'
];$this->productoModel->update(5, $data);

Esto generará una consulta similar a:

UPDATE productos
SET nombre = 'Cámara', codigo = 'CAM123'
WHERE id = 5

Actualizar múltiples registros

También es posible actualizar varios registros al mismo tiempo pasando un arreglo de IDs.

$this->productoModel->update(
[1,2,3],
['estatus' => 0]
);

Esto cambiará el estatus de todos esos registros.

Eliminación lógica con Soft Delete

Una característica muy útil de CodeIgniter 4 es Soft Delete.

En lugar de eliminar el registro de la base de datos, simplemente se marca como eliminado.

Esto se logra agregando en el modelo:

protected $useSoftDeletes = true;

Cuando usamos:

$this->productoModel->delete(5);

En realidad no se elimina el registro, solo se llena el campo deleted_at con la fecha actual.

Mostrar registros eliminados

Por defecto, findAll() no muestra registros eliminados.

Pero podemos cambiarlos usando:

Mostrar todos (incluyendo eliminados)

$productos = $productoModel
->withDeleted()
->findAll();

Mostrar solo eliminados

$productos = $productoModel
->onlyDeleted()
->findAll();

Esto es muy útil cuando queremos crear:

  • una papelera
  • una sección de restaurar registros

Eliminar definitivamente registros

Si queremos eliminar completamente los registros que fueron dados de baja, usamos:

$productoModel->purgeDeleted();

Esto elimina todos los registros que tengan valor en deleted_at.

El método save(): insertar o actualizar automáticamente

Otro método interesante es save(), que puede insertar o actualizar automáticamente dependiendo de los datos enviados.

Insertar

$data = [
'nombre' => 'Laptop',
'precio' => 15000
];$model->save($data);

Actualizar

Si incluimos la clave primaria:

$data = [
'id' => 5,
'nombre' => 'Laptop Gamer'
];$model->save($data);

Entonces actualizará el registro existente.

Ventajas de usar modelos en CodeIgniter 4

Utilizar modelos en CodeIgniter 4 ofrece muchas ventajas:

  • Reduce la cantidad de código SQL
  • Facilita la reutilización de lógica de base de datos
  • Permite realizar CRUD rápidamente
  • Integra funciones como Soft Delete
  • Mejora la organización del proyecto bajo MVC

Gracias a estas funciones, podemos crear operaciones CRUD completas con muy poco código.

Guía en Video