Modelos en PHP: Creación y Manipulación de Datos

Clase 11 de 35Curso de Desarrollo Web con PHP y Yii2

Contenido del curso

Modelos, vistas y controladores

Enlaces, navegación y tablas intermedias

Resumen

Cuando construimos una aplicación, necesitamos una pieza central que se encargue de transportar datos, aplicar reglas de negocio y validar información. Esa pieza es el modelo, y entender su funcionamiento cambia por completo la forma en que organizamos nuestro código. A continuación se desglosa, paso a paso, cómo crear un modelo desde cero en PHP, cómo asociarlo a un controlador y por qué se le considera el corazón de cualquier sistema.

¿Qué es un modelo y por qué es tan importante?

Un modelo es un paquete que agrupa datos, reglas de validación y lógica de negocio. Aunque la definición suene breve, la responsabilidad que carga es enorme [0:10]. Funciona como un contenedor que encapsula información y permite que distintas partes del sistema la compartan sin que se deforme en el camino.

Dentro de la documentación oficial existe una sección dedicada por completo a los modelos, lo cual da una idea de lo extenso que puede llegar a ser el tema. Sin embargo, lo esencial es comprender que el modelo no depende de la base de datos para existir: es una instancia independiente que, por sí sola, ya tiene sentido.

¿Cómo se crea un modelo paso a paso?

El primer paso es ubicar la carpeta models del proyecto y crear un archivo con el nombre en singular —por ejemplo, Book.php— porque cada instancia representa un solo objeto [1:22].

php

<?php namespace App\Models; use Illuminate\Base\Model; class Book extends Model { public string $title; public string $author; public function toString(): string { return sprintf("%s - %s", $this->title, $this->author); } } La convención de usar el nombre en singular responde a una cuestión de **ontología**: cada vez que instanciamos el objeto, estamos representando *un* libro, no varios. Nótese que no hay ID ni referencia a ninguna tabla; por ahora el modelo vive solo en memoria. ### ¿Cómo se conecta el modelo con el controlador? Dentro del controlador, la función que lee un archivo CSV itera línea por línea y crea una instancia de `Book` para cada registro [2:50]. php use App\Models\Book; // Dentro de la función actionBooks $book = new Book(); $book->title = $data[1]; $book->author = $data[2]; printf("%s\n", $book->toString()); Un detalle que causa frecuentes dolores de cabeza es la instrucción `use`. Como el controlador y el modelo viven en **namespaces distintos**, es obligatorio importar cada clase de forma individual —nunca con asterisco— para que el intérprete de PHP la reconozca [3:05]. ## ¿Qué significa transformar datos en información? Tener un título suelto y un autor suelto son solo **datos**. Cuando los encapsulamos dentro del modelo y los relacionamos, se convierten en **información** sobre la cual se pueden tomar decisiones [6:20]. Esa diferencia es fundamental: el modelo asocia campos que, por separado, carecen de contexto. Para demostrarlo, se creó una función privada llamada `quick` que recibe un objeto `Book`, modifica su título y lo devuelve ya transformado [7:10]. php private function quick(Book $book): Book { $book->title = sprintf("%s 🦕", $book->title); return $book; } El flujo completo es: - Se leen los datos de un archivo. - Se encapsulan en un objeto tipo modelo. - El modelo se envía a otra función que lo **opera y transforma**. - Se regresa modificado y se vuelve a utilizar. Este ciclo ilustra una de las dos grandes responsabilidades del modelo: **empaquetar datos y ser capaz de traspasarse** entre distintos elementos del sistema sin mutaciones inesperadas [8:30]. ## ¿Cómo manejar errores y filtrar datos vacíos? Al ejecutar el script por primera vez, apareció un *syntax error* en la línea 11 de `Book.php` por omitir la palabra `function`. Una ventaja del *framework* es que los **mensajes de error** son mucho más descriptivos que los de PHP puro: muestran la traza completa de clases y objetos involucrados [5:20]. También fue necesario validar que las líneas del archivo no vinieran vacías antes de crear el modelo: php if (!empty($data[0]) && !empty($data[2])) { // crear y operar el modelo } Este filtro evita instancias con datos incompletos y previene errores en tiempo de ejecución. Las **reglas de negocio** y las **reglas de validación** también son responsabilidad del modelo, aunque se abordarán más adelante, junto con la conexión a base de datos. Si ya estás experimentando con tus propios modelos, comparte en los comentarios qué atributos les has agregado y cómo los estás utilizando.