Ejemplo y anatomía de un modelo en CodeIgniter 3

Publicado por parzibyte en

Introducción

Hoy veremos un ejemplo de modelo en CodeIgniter 3 para ver cómo podemos crearlo, además de las ventajas que tiene y las responsabilidades que le podemos asignar.

En CodeIgniter, un modelo representa un objeto o una entidad dentro de nuestro sistema. Por ejemplo, podemos tener el modelo Usuario, Venta, Recibo, Mascota, etcétera. Es como una clase (técnicamente sí es una clase, pero me refiero al modo de abstraerlo) que se comunica con un controlador.

Lecturas recomendadas para aprender CodeIgniter

Te recomiendo leer:

Ubicación de los modelos

Todos los modelos que creemos van dentro de application/models. Dentro de esa carpeta creamos modelos, que no son más que clases PHP que extienden de CI_model.

Igual podemos crear subcarpetas para organizar nuestros modelos de mejor manera.

Nomenclatura de los modelos

Recomiendo poner el nombre de la entidad seguida de Model. Por ejemplo, si la entidad es Producto entonces se llamaría ProductoModel, y por lo tanto la clase también tendría ese nombre.

Ejemplo de modelo

Justo ahora estoy haciendo un sistema de ventas como el que ya hicimos la vez pasada con PHP puro, pero con CI (lo publicaré pronto, de hecho ya está en GitHub). Tengo el modelo producto, que se ve así:

Analiza el código y aquí lo vamos a explorar.

Extender a CI_model

Vemos que nuestros modelos son una clase que extiende a la clase CI_model, esto es para que herede las propiedades que permiten cargar librerías o bases de datos.

El constructor

Podemos aprovechar la programación orientada a objetos para hacer determinadas cosas en nuestro modelo. En mi caso cargo la base de datos para ahorrar cargarla en todos mis métodos.

Esto lo hago porque en todos mis métodos interactúo con la base de datos, pero si la cargamos sin usarla es un desperdicio.

Por cierto, podemos cargarla igualmente dentro de cada método, o en aquellos en donde la usemos.

Las propiedades

Como toda clase, tiene propiedades o miembros. Es importante definir esto porque:

  • El programador que lea nuestro modelo sabrá qué se hace en ese modelo, y cuáles propiedades tiene la entidad
  • Evitamos definir propiedades en tiempo de ejecución

Además, esto permite mandar el objeto al insertarlo, como veremos más adelante.

Los métodos

Una clase define métodos o funciones. Deben ser métodos relacionados con la misma; por ejemplo, si tenemos a la clase Mascota podemos tener al método comer.

Del mismo modo, ahora tenemos a la clase Producto. Un producto se vende o se elimina, pero aquí es cuando entra algo de confusión porque… ¿un producto se inserta? es un poco ambiguo.

Por eso es que no debemos ver a los modelos como una clase, sino como un modelo; que se encarga de gestionar la lógica de una entidad.

La protección de métodos

Como en toda clase, podemos definir métodos públicos o privados y esas cosas. Es sólo un aviso, puede que haya métodos que sólo usemos dentro de la clase pero no permitamos que se accedan desde afuera.

La base de datos

Esto no es una regla, pero la mayoría de veces un modelo gestiona lo que se hace dentro de la base de datos. Aquí vemos algo bueno en el método nuevo y guardarCambios, pues mandamos a $this en lugar de un arreglo o en lugar de hacer la consulta a mano.

Esto es gracias al query builder de CodeIgniter, el cual recibe un objeto con las columnas como claves y los datos como valores. De esta forma recibimos datos, los establecemos en el objeto y finalmente insertamos; así de simple y sencillo: nada de escribir consultas a mano.

Llamada a un modelo

Los modelos se llaman desde los controladores. Este post habla sobre modelos, no sobre controladores. Pero para dar un ejemplo, en un controlador podemos cargar un modelo así:

Y recordemos que el controlador se encarga de comunicarse con el usuario. Por ejemplo, puede recibir datos de un formulario, validarlos si es necesario y finalmente pasárselos al modelo.

Nota: no le asignes mucho trabajo al modelo; por ejemplo, deja la validación en los controladores para que los modelos solamente se encarguen de guardar datos.

Conclusión

Así es más o menos la anatomía de un modelo en CodeIgniter 3. Puedes basarte en este para tus próximos proyectos, y modificarlo a tu gusto y necesidades.


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB.Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron.Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scriptsLa plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C.Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

3 Comments

Ejemplo de controlador en CodeIgniter 3 - Parzibyte's blog · octubre 11, 2018 a las 5:12 pm

[…] de ver cómo crear y usar un modelo en el framework CodeIgniter. Veamos ahora un ejemplo de cómo se usan los controladores en CodeIgniter. Vamos a definir un […]

Cómo comenzar un proyecto en CodeIgniter 3.1.9 - Parzibyte's blog · octubre 11, 2018 a las 5:16 pm

[…] de leer este post tal vez quieras saber más sobre modelos y controladores en este […]

Pequeño sistema de ventas con CodeIgniter y MVC - Parzibyte's blog · julio 5, 2019 a las 12:03 pm

[…] cierto, lee sobre los controladores y modelos, pues explicaré todo suponiendo que ya tienes una […]

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: