Modelos
Los modelos están disponibles opcionalmente para los que deseen utilizar un enfoque más tradicional MVC.
- Qué es un modelo?
- Anatomía de un modelo
- Cargando un modelo
- Auto-carga de modelos
- Conexión a su base de datos
Qué es un modelo?
Los modelos son clases PHP que se han diseñado para trabajar con la información en su base de datos. Por ejemplo, digamos que usted usa CodeIgniter para administrar un blog. Puede que tenga una clase de modelo que contiene funciones para insertar, actualizar y recuperar datos de su blog. Aquí está un ejemplo de lo que podría ser la clase del modelo:
class Blogmodel extends Model {
var $title = '';
var $content = '';
var $date = '';
function Blogmodel()
{
// Llamando al contructor del Modelo
parent::Model();
}
function get_last_ten_entries()
{
$query = $this->db->get('entries', 10);
return $query->result();
}
function insert_entry()
{
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->insert('entries', $this);
}
function update_entry()
{
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->update('entries', $this, array('id', $_POST['id']));
}
}
Nota: Las funciones en el ejemplo anterior usan funciones de base de datos Active Record.
Anatomia de un Modelo
La clases de Modelo estan almacenadas en su carpeta application/models/. Se puede anidar dentro de sub-carpetas si desea esta organización.
El prototipo básico para una clase de Modelo es esta:
class Model_name extends Model {
function Model_name()
{
parent::Model();
}
}
Cuando Model_name es el nombre de su clase. Los nombre de clase debe tener la primera letra en mayúscula con el resto del nombre en minúscula. Asegúrese de que su clase extiende el modelo de base de la clase.
El nombre del archivo será la versión en minúscula de su nombre de clase. Por ejemplo, si su clase es esta:
class User_model extends Model {
function User_model()
{
parent::Model();
}
}
su archivo será este:
application/models/user_model.php
Cargando un Modelo
Sus modelos suelen ser cargados y llamados desde sus funciones de controlador. Para carga un modelo debe usar la siguiente función:
$this->load->model('Model_name');
Si su modelo esta localizado en una sub-carpeta, incluya la ruta relativa de su carpeta de modelos. Por ejemplo, si tiene un modelo localizado en application/models/blog/queries.php cargará usando esto:
$this->load->model('blog/queries');
Una vez cargado, tendrá que acceder a su funciones de modelo utilizando un objeto con el mismo nombre que su clase:
$this->load->model('Model_name');
$this->Model_name->function();
Si desea que su modelo este asignado a un nombre de objeto diferente, ud. lo puede especificar por medio del segundo parámetro de la función de carga:
$this->load->model('Model_name', 'fubar');
$this->fubar->function();
Este es un ejemplo de un controlador, que carga un modelo, entonces sirve a una vista:
class Blog_controller extends Controller {
function blog()
{
$this->load->model('Blog');
$data['query'] = $this->Blog->get_last_ten_entries();
$this->load->view('blog', $data);
}
}
Auto-carga de Modelos
Si usted encuentra que necesita un modelo particular a nivel global a lo largo de su aplicación, le puede decir a CodeIgniter que lo cargue automáticamente durante la inicialización del sistema. Esto se realiza abriendo el archivo application/config/autoload.php y agregando el modelo al arreglo de auto-carga.
Conexión a su base de datos
Cuando se carga un modelo, éste NO se conecta automáticamente a su base de datos. Las siguientes opciones de conexión están habilitadas para ud:
- Puede conectarse usando los métodos de base de datos standard descriptos aquí, ya sea dentro de su clase Controlador o su clase Modelo.
- Puede decirle a la función de autocarga del modelo para auto-conectarse pasándole TRUE (boolean) a través del tercer parámetro, y la configuración de conectividad, tal como se define en su archivo de configuración de la base de datos a ser utilizado:
$this->load->model('Model_name', '', TRUE); - Puede pasar manualmente la configuración de la conectividad de base de datos a través del tercer parámetro:
$config['hostname'] = "localhost";
$config['username'] = "myusername";
$config['password'] = "mypassword";
$config['database'] = "mydatabase";
$config['dbdriver'] = "mysql";
$config['dbprefix'] = "";
$config['pconnect'] = FALSE;
$config['db_debug'] = TRUE;
$this->load->model('Model_name', '', $config);