Utilizar los modelos desde los controladores en CodeIgniter

  • Por
  • PHP
Cómo utilizar los modelos desde un controlador de CodeIgniter, cargar el modelo, solicitar datos al modelo por medio de sus métodos y mostrarlos por pantalla con una vista.
En el artículo anterior del Manual de CodeIgniter comenzamos a explicar los modelos y cómo gestionar las conexiones a base de datos con ellos. Vimos cómo se construyen los modelos, por lo que ahora pasaremos mostrar cómo utilizarlos desde los controladores.

Cargar un modelo

La carga de un modelo se realiza desde el controlador que lo va a utilizar, por medio del método de carga de modelos, con un código como este:

$this->load->model('Nombre_model');

Esto supone que el modelo está en el directorio general de los modelos (system/application/models).

Ahora, si pretendiésemos cargar un modelo que está en un subdirectorio, tendríamos que indicar la ruta en la función de carga del modelo.

$this->load->model('carpeta_del_modelo/Nombre_model');

Si queremos cargar varios modelos de una sola vez, podemos hacerlo pasando un array con todos los modelos que deseamos cargar:

$this->load->model(array('Cliente_model','Factura_model'));

Una vez cargado un modelo, sus métodos para el acceso a los datos estarán disponibles en nuestro controlador, a través del propio objeto controlador, el nombre del modelo que queremos accionar y la función que queremos invocar dentro del modelo.

$this->Nombre_model->funcion_del_modelo();

Carga automática de modelos

Si deseamos cargar automáticamente uno o varios modelos cada vez que se inicia cualquier solicitud de página en nuestra aplicación web, es decir, sin que tengamos que cargarlos explícitamente desde los controladores, podemos especificar en el archivo de configuración "autoload.php" cuáles son los modelos que vamos a requerir siempre.

Este archivo de configuración se encuentra en la ruta "system/application/config/autoload.php". Tenemos que modificar la lista de modelos a cargar en la variable de configuración "model", con un código como este:

$autoload['model'] = array('Usuario_model', 'Empresa_model');

Esto cargaría el modelo de usuarios y el modelo de empresas en todas las páginas de nuestra aplicación web con CodeIgniter.

Ejemplo de controlador que utiliza modelos

Para que se pueda ver mejor cómo utilizar un modelo desde un controlador, veamos un ejemplo. A continuación tenemos un esquema de un controlador que utiliza los modelos para extraer datos de la base de datos y enviarlos a una vista para mostrarlos en la página.

class Factura extends Controller {
   function mostrar_factura($id_factura){
      $this->load->model('Factura_model');
      $factura = $this->Factura_model->dame_factura_id($id_factura);
      $this->load->view('mostrar_factura', $factura);
   }
}

Este controlador llamado Factura tiene una función para mostrar una factura, que recibe el identificador de la factura que se desea ver.

En dicha función se carga el modelo adecuado para el trabajo con facturas "Factura_model". Luego llamamos a la función dame_factura_id() del modelo cargado, a la que le pasamos el identificador de la factura que deseábamos ver. La función dame_factura_id() del modelo devuelve un array con los datos de la factura. Luego mostramos los datos de la factura con la vista "mostrar_factura" y con los datos de configuración, que es el array que obtuvimos al invocar la función del modelo.

Con esto hemos podido ver un controlador simplificado, que utiliza tanto un modelo como una vista para mostrar el contenido de una factura que se ha traído de la base datos. Por fin hemos visto todos los componentes del MVC trabajando por separado y coordinados desde el controlador. Espero que hasta este punto haya quedado claro al menos el modo en el que trabajaremos con CodeIgniter, aunque todavía hay muchas cosas en el aire que trataremos de explicar en el futuro.

Conectar con una base de datos

Pero antes de terminar este tema, por si alguien desea hacer sus primeras pruebas para construir un modelo, conviene explicar cómo conectar con la base de datos en CodeIgniter. En realidad existen diversos modos de conexión, automática y manual, pero no los vamos a ver todos ahora.

Veremos simplemente el método más sencillo para hacer la conexión con la base de datos, que es la conexión automática. Ésta la realiza CodeIgniter por nosotros en cada página que se solicite al servidor y tenemos que configurarla en el archivo de configuración autoload.php (system/application/config/autoload.php). En ese archivo veremos un array de librerías que se tienen que incluir en todos los controladores, array "libraries". En ese array tenemos que colocar la librería 'database', de una forma como esta:

$autoload['libraries'] = array('database', 'otras_librerias...");

Además, tendremos que modificar otro archivo de configuración llamado database.php (system/application/config/database.php), colocando todos los datos de la base de datos que queremos usar: el servidor, usuario, contraseña, base de datos, etc. Por ejemplo, esto sería un ejemplo de configuración de una base de datos que tenemos en local.

$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "facturacion";
$db['default']['dbdriver'] = "mysql";
$db['default']['dbprefix'] = "";
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = "";
$db['default']['char_set'] = "utf8";
$db['default']['dbcollat'] = "utf8_general_ci";

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Pablo

18/2/2010
Autocarga en Kohana
Empecé a probar CodeIgniter y conocí Kohana. La ventaja de Kohana es la capacidad de autocarga de clases, cargar un modelo solo basta con escribir

$this->miModel = new Clientes_Model;

Lo mismo para cualquier tipo de clases. Esto es gracias a la implementación de las nuevas capacidades de PHP5. La ventaja sobre CI es que es 100% orientado a objetos y hace uso de todas las ventajas de PHP5, la organización de la aplicación es más clara. La limitación obvia, es que no funciona sobre PHP 4.

Distriker

20/3/2010
No es dificil
Su manejo no es difícil por lo que se podrán usar con facilidad.

Saludos

midesweb

20/3/2010
Autocargar modelos en codeigniter
En codeigniter también se pueden autocargar modelos y cualquier otra clase que sea necesario. Para ello hay un archivo de configuración autoload.php que está en systemapplicationconfig

beni0888

05/7/2010
Trabajar con varias bbdd de forma simultánea
Hola,
me gustaría saber cómo habría que configurar el framework para trabajar con más de una bbdd de manera simultánea.
Saludos

federico_vecco

11/10/2013
Cargar la Base de Datos
Gracias por el manual, es muy ameno para seguirlo y fácil de entender, como todos los manuales y artículos que publican.
Quería agregar una alternativa a la carga de la base de datos. En el artículo explican la carga automática desde el archivo autoload.php. Si no se quisiera cargar automáticamente la base de datos porque, por ejemplo, no se va a utilizar en todas las páginas de la aplicación, se debe utilizar la sentencia:
$this->load->database(); dentro de la función que se necesite o dentro del constructor si se quiere tener la base de datos disponible en toda la clase.
Me topé con este problema y me llevó un buen rato darme cuenta que no estaba conectando con la base de datos :-(. Comparto por si alguien que está aprendiendo CI se encuentra con el mismo problema.
Saludos y sigan publicando estos muy buenos manuales!

Danny Cortes

15/9/2014
¡Gracias!
Muchas gracias por el manual, está excelente!!! Apenas estoy empezando y me ha servido mucho para entender :)

Kaice

12/5/2016
Kohana helpme
Podrían ayudarme con información de Kohana estuve aprendiendo algo pero quisiera un tutorial ayudenme.