Introdução aos models do Codeigniter

Neste artigo vamos falar sobre Models no CodeIgniter. O CodeIgniter é baseado no modo de desenvolvimento Model-View-Controller. A MVC é uma abordagem de software que realiza a separação da lógica da aplicação de sua apresentação. Na prática, permite que nossas páginas web contenham o mínimo de script, já que a apresentação é separada do PHP.

Observação: Models estão opcionalmente disponíveis para se quisermos usar a abordagem MVC mais tradicional.

Model: Representa nossas estruturas de dados. Tipicamente, nossas classes model irão conter funções que nos ajudarão a buscar, inserir e substituir informações em nosso banco de dados.

No CodeIgniter models são classes PHP projetadas para trabalhar a informação em nosso banco de dados. Por exemplo, suponhamos que vamos usar o CodeIgniter para gerenciarmos um portal. Poderíamos ter uma classe model contendo funções para inserir, atualizar e buscar nossos dados referentes ao portal no banco. Vejamos agora um exemplo de uma classe model.

Listagem 1: Exemplo de classe Model


class Portalmodel extends Model {
	var $title ='';
	var $content ='';
	var $Date ='';
	
	function Portalmodel()
	{
		// Chamar 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->contents =$_POST['content'];
	$this->date =time();
	$this->db->insert('entries',$this);
	}
	function update_entry ()
	{
	$this->Date =time();
	$this->db->update('entries',$this, array('id',$_POST[]));
	}
}

Estrutura do Model no Codeigniter

As classes model devem ser armazenadas no seguinte diretório: application/models/. Podemos também fazer o armazenamento em subpastas.

O protótipo básico de uma classe model é:

Listagem 2: Model protótipo básico


class Model_name extends Model {

	function Model_name()
	{
		// Chamar o construtor do Model
		parent::Model();	
	}
}

Onde temos “model_name”, colocamos o nome da nossa classe. Uma coisa muito importante que não podemos esquecer é que os nomes de classes devem ter a inicial sempre maiúscula e também devemos nos certificar de que nossa classe estende a classe model básica.

Quando fomos salvar esse model, o seu nome será o nome da classe, só que todo em minúsculo. Por exemplo, se nossa classe é:

Listagem 3: Nome ao salvar a classe


class Artigos_model extends Model {

	function Artigos_model()
	{
		parent::Model();	
	}
}

Então nesse caso nosso arquivo ficaria com o seguinte endereço no nosso diretório: Application/models/artigo_model.php.

Carregando um model no Codeigniter

Nossos models serão tipicamente carregados e chamados dentro das funções de nossos controllers. Para carregarmos um model, usaremos a seguinte função: $this->load->model(‘nome-do-model’);

Porém, caso nosso model esteja em uma subpasta, temos que incluir o caminho relativo ao nosso diretório. Por exemplo, se tivermos um model localizado em application/models/portal/artigo_model.php. iríamos carregar ele da seguinte forma: $this->load->model(‘portal/nome-do-model’);

Uma vez que tenhamos carregado, vamos acessar as funções de nosso model utilizando um objeto como o mesmo classe que havíamos criado:

$this->load->model(‘nome-do-model’);

$this->nome-do-model->function();

Se desejarmos atribuir nosso model a um objeto de nome diferente, podemos especificar isto através do seguinte parâmetro da função de carregamento:

$this->load->model(‘model-do-model’,’fubar’);

Vejamos um exemplo de um controller que carrega um model e então serve uma view.

Listagem 4: Carregando um model e servindo a uma view


<?php
class Inicial extends CI_Controller {	
	
	function artigos()
	{
	$this->load->model('artigos_model')
	$data['query']=this->artigos_model->get_last_ten_entries();
	$this->load->view('viewprincipal',$data);
	}
}
?>

Conectando ao Banco de Dados

Quando carregamos um model, ele não se conecta automaticamente ao nosso banco, as seguinte opções de conexão estão disponíveis:

Podemos conectar usando os métodos padrões de banco de dados, descritos aqui, através de nossa classe controller ou de sua classe model.

Podemos mandar a função de carregamento do model para se autoconectar passando TRUE (booleano) através do terceiro parâmetro, como definido no arquivo de configuração de banco de dados: $this->load->model(‘nome-do-model’,’’,TRUE);

Podemos também passar as configurações manualmente, também através do arquivo de configuração de banco de dados. Encontrado no diretório application/config/database.php.

Listagem 5: Dados do arquivo application/config/database.php


$db['default']['hostname'] = 'localhost';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';
$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';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

Afinal, o que entender sobre os models no CodeIgniter

Este artigo teve como objetivo apresentar um pouco dos models no CodeIgniter, não sendo obrigatória sua utilização em nossas aplicações web. Porém, nos deixando a disposição sua utilização, caso desejemos usar uma abordagem MVC completa. E tivemos a noção básica de como criarmos e carregarmos esses models. E por último vimos como modificar algumas configurações da conexão com o banco de dados.

Espero que tenha sido de fácil compreensão a todo os leitores. Fiquem a vontade para sugerir temas e dicas.

Abraços a todos e até ao próximo artigo.

Links Úteis

Saiba mais sobre PHP ;)