> Manuales > Manual de CodeIgniter

Veamos qué son los modelos en CodeIgniter, que se pueden utilizar de manera opcional para encapsular los accesos a la base de datos.

En este artículo, que forma parte del Manual de CodeIgniter, vamos a comenzar con los modelos en CodeIgniter, el tercero y último de los integrantes del patrón de desarrollo utilizado en este framework PHP.

En artículos anteriores ya vimos de manera general qué eran los modelos, cuando explicamos el Modelo - Vista - Controlador (MVC), así que en este caso vamos a ver cómo CodeIgniter los gestiona. No obstante cabe decir que los modelos en el MVC son los módulos que tienen como responsabilidad el acceso y control de los datos que hay en bases de datos y mantienen encapsuladas todas las particularidades y complejidades de los accesos a las tablas para realizar cualquier tipo de operación.

Al centralizarse todas las acciones sobre la base de datos por medio de los modelos, en los controladores podemos olvidarnos de lo compleja o simple que sea nuestra base de datos, incluso de qué tipo de base de datos tiene el servidor con el que estamos trabajando.

En el patrón MVC, los modelos son una de las partes fundamentales, pero en el caso de CodeIgniter, su uso es sólo opcional. El desarrollador es el responsable de decidir si le viene bien el uso de los modelos o si prefiere realizar sus aplicaciones haciendo cualquier tipo de operación sobre la base de datos en los propios controladores.

Nota: La posibilidad de usar o no modelos depende de nosotros. Esta libertad en cuanto a la elección de nuestras propias costumbres de codificación es muy propia de CodeIgniter, que se vende a si mismo como un framework flexible, que se puede adaptar a la mayoría de los entornos. Nosotros, no obstante, queremosrecomendar su utilización, por lo menos para probar las ventajas de uso y ver si en el futuro nos interesa o no basarnos en ellos para realizar los accesos a la base de datos. Sin duda, si queremos programar "a lo grande", debemos utilizarlos. De hecho ofrecen muchas ventajas para proyectos grandes, como la abstracción de base de datos.

Cómo es un modelo en CodeIgniter

Los modelos en la práctica son clases, de programación orientada a objetos, que tienen sus métodos o funciones, a los que se puede invocar desde los controladores para hacer operaciones con la base de datos.

Los modelos, como decíamos, contendrán una serie de funciones o métodos para realizar las operaciones típicas. Por ejemplo, pensemos en una aplicación que tiene que trabajar con usuarios. Entonces tendremos un modelo de usuarios que tendrá una serie de funciones, como la selección de usuarios, inserción, actualización y borrado. Nuestra aplicación generalmente tendrá varios modelos, para trabajar con cada una de las entidades de nuestra base de datos.

Aquí podemos ver un ejemplo de modelo en CodeIgniter, aunque incompleto, que puede darnos alguna idea. Puede merecer la pena echar un vistazo, a pesar que no lo entendamos del todo. No hay que preocuparse, pues en breve explicaremos cada una de sus partes con detalle.

class Usuario_model extends Model {

   function __construct(){
      parent::Model();
   }
   
   function existe_email($email){
      $this->db->select('email_usuario');
      $this->db->where('email_usuario', $email);
      $query = $this->db->get('usuario');
      if ($query->num_rows() > 0){
         return 1;
      }
      return 0;
   }
   
   function usuario_login($email){
      $this->db->where('email_usuario', $email);
      //$this->db->where('clave', md5($clave));
      $query = $this->db->get('usuario');
      if ($query->num_rows() > 0){
         return $query->row();
      }
      return 0;
   }
   
   function inserta_usuario($datos = array()){
      if(!$this->_required(array("email_usuario","clave"), $datos)){
         return FALSE;
      }
      //clave, encripto
      $datos['clave']=md5($datos['clave']);
   
      $this->db->insert('usuario', $datos);
      return $this->db->insert_id();
   }
}

Bases de la construcción de modelos en CodeIgniter

Los modelos se construyen extendiendo la clase Model y tenemos que nombrarlos con la primera letra en mayúsculas. Dentro del modelo que estamos creando tenemos que definir obligatoriamente un constructor, donde tenemos que hacer una llamada al constructor de la clase de la que hereda (clase parent, llamada Model).

Este sería el modelo más básico, que está vacío, ya que no tiene ninguna función para operar con la base de datos. Mostramos primero el código básico de un modelo en PHP 5, donde los constructores tienen el nombre __construct().

class Nombre_model extends Model {
   function __construct(){
      parent::Model();
   }
}

Ahora veamos cómo sería el modelo básico en PHP 4, donde los modelos tendrían una pequeña diferencia, dado que los constructores en la versión 4 de PHP tienen siempre el mismo nombre que la propia clase.

class Nombre_model extends Model {
   function Nombre_model(){
      parent::Model();
   }
}

Los modelos se han de guardar en la carpeta "system/application/models/". El nombre de archivo del código del modelo debe tener extensión .php y se ha de escribir con todas las letras en minúsculas. Por ejemplo nuestro modelo, cuya clase que se llama "Nombre_model", deberíamos guardarlo en la ruta:

system/application/models/nombre_model.php

Si lo deseamos, podemos organizar nuestros modelos por subdirectorios, siempre dentro de la carpeta "system/application/models/". Simplemente cuando los carguemos tendremos que indicar en qué carpeta están localizados.

En el siguiente artículo ampliaremos esta información y mostraremos cómo utilizar los modelos en una aplicación web, cargándolos desde los controladores e invocando sus métodos para el acceso a las tablas. Luego veremos cómo configurar CodeIgniter para decirle cuál es nuestro servidor de base de datos, el nombre de la base de datos a utilizar y otros datos de acceso, para que el propio Framework pueda hacer conexiones desde los modelos.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual