Models
Models estão opcionalmente disponíveis para aqueles que quiserem usar a abordagem MVC mais tradicional.
O que é um Model?
Models são classes PHP projetadas para trabalhar a informação em seu banco de dados. Por exemplo, digamos que você use o Code Igniter para gerenciar um blog. Você poderia ter uma classe model contendo funções para inserir, atualizar e buscar seus dados do banco. Mais abaixo, um exemplo de como se parece uma classe Model:
class Blogmodel extends Model {
var $title = '';
var $content = '';
var $date = '';
function Blogmodel()
{
// Chama o construtor do Model
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']));
}
}
Note: As funções do exemplo acima usam as funções Active Record para banco de dados.
Anatomia de um Model
Classes Model são armazenadas em seu diretórios application/models/. Elas podem ser aninhadas em subdiretórios se você preferir.
O protótipo básico para uma classe Model é este:
class Model_name extends Model {
function Model_name()
{
parent::Model();
}
}
Onde Model_name é o nome da sua classe. Nomes de Classes devem ter inicial maiúscula. Tenha certeza que sua classe estende a classe Model básica.
O nome do arquivo será o nome da classe todo em minúsculas. Por exemplo, se sua classe é essa:
class User_model extends Model {
function User_model()
{
parent::Model();
}
}
Então seu arquivo será:
application/models/user_model.php
Carregando um Model
Seus models serão tipicamente carregados e chamados dentro das funções de seus controller. Para carregar um model, você usará a seguinte função:
$this->load->model('Model_name');
Se seu model estiver em um subdiretório, inclua o caminha relativo para sua diretório. Po exemplo, se você tem um model localizado em application/models/blog/queries.php você o carregará usando:
$this->load->model('blog/queries');
Uma vez carregado, você acessará as funções de seu model utilizando um objeto como o mesmo classe que havia criado:
$this->load->model('Model_name');
$this->Model_name->function();
Se você quiser atribuire seu model a um objeto de nome diferente, pode espeficicar isto através do segundo parâmetro da função de carregamento:
$this->load->model('Model_name', 'fubar');
$this->fubar->function();
Abaixo um exemplo de um controller, que carrega um model e então serve uma view:
class Blog_controller extends Controller {
function blog()
{
$this->load->model('Blog');
$data['query'] = $this->Blog->get_last_ten_entries();
$this->load->view('blog', $data);
}
}
Conectando-se a seu Bando de Dados
Quanto um model é carregado, ele NÂO se conecta automaticamente ao seu banco. As seguintes opções de conexão estão disponíveis:
- Você pode conectar usando os métodos padrões de bancos de dados, descritos aqui, ou através de sua classe Controller class ou de sua classe Model.
- Você pode mandar a função de carregamento do model para se autoconectar passando TRUE (booleano) através do terceiro parâmetro, como
definido em arquivo de configuração do banco de dados:
$this->load->model('Model_name', '', TRUE); - Você pode passar as configuração de conexão manualmente, também através do terceiro 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;
$config['active_r'] = TRUE;
$this->load->model('Model_name', '', $config);