CodeBanco de dados Igniter: Configuração, atualização e exclusão de dados
⚡ Resumo Inteligente
CodeO Igniter Database cria modelos e controladores para um gerenciador de contatos com suporte de MySQLUm BaseModel compartilhado implementa as operações de inserção, leitura, atualização e exclusão, e os modelos filhos Pals e Cities o herdam, de modo que os controladores reutilizem as mesmas operações de banco de dados em toda a aplicação.

CodeBanco de dados Igniter
No tutorial anterior, abordamos os conceitos básicos de CodeIgniter Active Record e como inserir, atualizar, excluir e ler registros do banco de dados. Neste tutorial, criaremos modelos de banco de dados e usaremos formulários para criar e atualizar registros. Se você é completamente novo no trabalho com bancos de dados, este tutorial é para você. CodeIgniter, é aconselhável que você leia o tutorial anterior em primeiro lugar.
CodeConfiguração do banco de dados Igniter
Começaremos criando o banco de dados do projeto tutorial. Criaremos um banco de dados simples para gerenciar informações de contato, com duas tabelas chamadas `pals` e `citys` (as cidades onde os contatos moram). O relacionamento entre `pals` e `citys` é um-para-um, com `id` em `citys` como chave primária e `city_id` como chave estrangeira na tabela `pals`.
Execute os seguintes scripts para criar o banco de dados:
CREATE TABLE `pals` ( `id` int(11) NOT NULL AUTO_INCREMENT, `city_id` int(11) DEFAULT NULL, `contact_name` varchar(245) DEFAULT NULL, `contact_number` varchar(245) DEFAULT NULL, `email_address` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) );
Vamos agora criar a tabela das cidades:
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) );
CodeModelos de banco de dados Igniter
Agora vamos criar modelos para nosso banco de dados. O modelo é a parte M do MVC. O modelo lida com acesso a dados, manipulação de dados e lógica de negócios.
In CodeNo Igniter, cada modelo precisa definir os métodos que irá suportar. Em vez de repetir o mesmo código em cada modelo, aproveitaremos a herança da programação orientada a objetos e criaremos uma classe de modelo pai que define os métodos básicos que queremos que nossos modelos suportem.
A tabela abaixo mostra os métodos que definiremos e como os dados serão acessados.
| S / N | Forma | Descrição |
|---|---|---|
| 1 | __construir | Define o método construtor que chama o método construtor da classe pai. |
| 2 | obter_todos | Recupera todos os campos e registros do banco de dados sem quaisquer condições. |
| 3 | get_by_id | Recupera uma única linha do banco de dados usando a chave primária do tipo INT chamada id. |
| 4 | chegar_onde | Recupera todos os campos do banco de dados com base nos critérios fornecidos. |
| 5 | inserir | Insere um novo registro no banco de dados. |
| 6 | atualizar | Atualiza um registro existente no banco de dados com base na chave primária do tipo INT chamada id. |
| 7 | delete | Exclui um registro existente do banco de dados com base na chave primária do tipo INT chamada id. |
A imagem a seguir mostra o diagrama de classes e como os modelos filhos Pals e Cities se relacionam com o modelo pai BaseModel.
Criaremos dois modelos conforme descrito na imagem acima. Crie uma nova classe `BaseModel` em `application/models/BaseModel.php` e adicione o seguinte código:
<?php class BaseModel extends CI_Model { protected $table = ''; public function __construct() { parent::__construct(); } public function get_all() { return $this->db->get($this->table) ->result(); } public function get_by_id($id) { return $this->db->get_where($this->table, array('id' => $id)) ->row(); } public function get_where($where) { return $this->db->where($where) ->get($this->table) ->result(); } public function insert($data) { return $this->db->insert($this->table, $data); } public function update($id, $data) { $this->db->where('id', $id); $this->db->update($this->table, $data); } public function delete($id) { $this->db->where('id', $id); $this->db->delete($this->table); } }
Aqui:
- `protected $table = ";` define uma variável protegida chamada `table`. Esta variável é preenchida pela respectiva classe filha para especificar com qual tabela os métodos do modelo base devem interagir.
- public function __construct() {…} define o construtor e executa o construtor da classe pai CI_Model.
- get_all() {…} usa a biblioteca de banco de dados e o valor de $table para executar a consulta SELECT.
- get_by_id($id) {…} recupera uma única linha e aceita um parâmetro $id do tipo de dados INT.
- get_where($where) {…} define um método get que permite definir uma cláusula where.
- insert($data) {…} aceita o parâmetro de matriz $data contendo os valores a serem gravados no banco de dados.
- update($id, $data) {…} aceita o parâmetro de matriz $data contendo os valores a serem atualizados.
- delete($id) {…} aceita um parâmetro $id do tipo de dados INT.
Agora que terminamos com a classe do modelo pai, vamos criar nosso modelo Pals. Crie um novo arquivo em application/models/Pals_model.php e adicione o seguinte código:
<?php class Pals_model extends BaseModel { protected $table = 'pals'; public function __construct() { parent::__construct(); } public function get_by_id($id) { $this->db->where('pals.id', $id); $this->db->select('pals.*,cities.name'); $this->db->from('pals'); $this->db->join('cities', 'pals.city_id = cities.id'); $query = $this->db->get(); return $query->row(); } public function get_all() { $this->db->select('pals.*,cities.name'); $this->db->from('pals'); $this->db->join('cities', 'pals.city_id = cities.id'); $query = $this->db->get(); return $query->result(); } }
Aqui:
- class Pals_model extends BaseModel {…} estende o modelo pai BaseModel e automaticamente torna todos os seus métodos acessíveis à classe filha.
- protected $table = 'pals'; define o nome da tabela associada a este modelo.
- __construct() {…} inicializa o construtor pai.
- A função pública `get_by_id($id)` sobrescreve `get_by_id` para fornecer uma implementação personalizada. A consulta usa uma junção para recuperar o nome da cidade da tabela `cities`.
- public function get_all() {…} sobrescreve get_all para implementar uma consulta de junção entre as tabelas pals e cities.
Crie um novo arquivo em application/models/Cities_model.php:
<?php class Cities_model extends BaseModel { protected $table = 'cities'; public function __construct() { parent::__construct(); } }
Aqui:
- protegido $tabela = 'cidades'; define a tabela do banco de dados modelo.
Como você pode ver, a herança nos poupa muito tempo ao trabalhar com modelos em CodeIgnição.
Controladores do Gerenciador de Contatos
Agora que criamos os modelos, vamos criar os controladores para nossa aplicação. Teremos dois controladores: Cidades e Contatos. Vamos começar com Cidades. Crie um novo arquivo chamado Cidades.php no diretório application/controllers e adicione o seguinte código:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Cities extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper('url', 'form'); $this->load->library('form_validation'); $this->load->model('cities_model'); } public function index() { $header['title'] = 'Cities Listing'; $data['pals'] = $this->cities_model->get_all(); $this->load->view('header',$header); $this->load->view('cities/index', $data); $this->load->view('footer'); } public function create() { $header['title'] = 'Create City'; $this->load->view('header',$header); $this->load->view('cities/create'); $this->load->view('footer'); } public function store() { $rules = array( array( 'field' => 'name', 'label' => 'City Name', 'rules' => 'required' ) ); $this->form_validation->set_rules($rules); if ($this->form_validation->run() == TRUE) { $data = array('name' => $this->input->post('name')); $this->cities_model->insert($data); redirect(base_url('cities')); } else { $header['title'] = 'Create City'; $this->load->view('header',$header); $this->load->view('cities/create'); $this->load->view('footer'); } } public function edit($id) { $header['title'] = 'Edit City'; $data['city'] = $this->cities_model->get_by_id($id); $this->load->view('header', $header); $this->load->view('cities/edit', $data); $this->load->view('footer'); } public function update($id) { $rules = array( array( 'field' => 'name', 'label' => 'City Name', 'rules' => 'required' ) ); $this->form_validation->set_rules($rules); if ($this->form_validation->run() == TRUE) { $data = array('name' => $this->input->post('name')); $this->cities_model->update($id,$data); redirect(base_url('cities')); } else { $header['title'] = 'Edit City'; $data['city'] = $this->cities_model->get_by_id($id); $this->load->view('header',$header); $this->load->view('cities/create',$data); $this->load->view('footer'); } } public function delete($id) { $header['title'] = 'Delete City'; $data['city'] = $this->cities_model->get_by_id($id); $this->load->view('header', $header); $this->load->view('cities/delete', $data); $this->load->view('footer'); } public function destroy($id) { $this->cities_model->delete($id); redirect(base_url('cities')); } }
Aqui:
- O código acima implementa todos os métodos necessários para criar, atualizar, excluir e ler linhas do banco de dados.
Crie outro arquivo Contacts.php em application/controllers e adicione o seguinte código:
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class Contacts extends CI_Controller { public function __construct() { parent::__construct(); $this->load->helper('url', 'form'); $this->load->library('form_validation'); $this->load->model('pals_model'); } public function index() { $header['title'] = 'Contacts List'; $data['pals'] = $this->pals_model->get_all(); $this->load->view('header', $header); $this->load->view('contacts/index', $data); $this->load->view('footer'); } public function create() { $this->load->model('cities_model'); $header['title'] = 'Create Contact'; $data['cities'] = $this->cities_model->get_all(); $this->load->view('header', $header); $this->load->view('contacts/create', $data); $this->load->view('footer'); } public function store() { $rules = array( array( 'field' => 'contact_name', 'label' => 'Contact Name', 'rules' => 'required' ), array( 'field' => 'contact_number', 'label' => 'Contact Number', 'rules' => 'required', 'errors' => array( 'required' => 'You must provide a %s.', ), ), array( 'field' => 'email_address', 'label' => 'Email Address', 'rules' => 'required' ), array( 'field' => 'city_id', 'label' => 'City', 'rules' => 'required' ) ); $this->form_validation->set_rules($rules); if ($this->form_validation->run() == FALSE) { $this->load->model('cities_model'); $header['title'] = 'Create Contact'; $data['cities'] = $this->cities_model->get_all(); $this->load->view('header', $header); $this->load->view('contacts/create', $data); $this->load->view('footer'); } else { $data = array( 'city_id' => $this->input->post('city_id'), 'contact_name' => $this->input->post('contact_name'), 'contact_number' => $this->input->post('contact_number'), 'email_address' => $this->input->post('email_address'), ); $this->pals_model->insert($data); redirect(base_url('contacts')); } } public function edit($id) { $this->load->model('cities_model'); $header['title'] = 'Edit Contact'; $data['cities'] = $this->cities_model->get_all(); $data['pal'] = $this->pals_model->get_by_id($id); $this->load->view('header', $header); $this->load->view('contacts/edit', $data); $this->load->view('footer'); } public function update($id) { $rules = array( array( 'field' => 'contact_name', 'label' => 'Contact Name', 'rules' => 'required' ), array( 'field' => 'contact_number', 'label' => 'Contact Number', 'rules' => 'required', 'errors' => array( 'required' => 'You must provide a %s.', ), ), array( 'field' => 'email_address', 'label' => 'Email Address', 'rules' => 'required' ), array( 'field' => 'city_id', 'label' => 'City', 'rules' => 'required' ) ); $this->form_validation->set_rules($rules); if ($this->form_validation->run() == FALSE) { $this->load->model('cities_model'); $header['title'] = 'Create Contact'; $data['cities'] = $this->cities_model->get_all(); $data['pal'] = $this->pals_model->get_by_id($id); $this->load->view('header', $header); $this->load->view('contacts/edit', $data); $this->load->view('footer'); } else { $data = array( 'city_id' => $this->input->post('city_id'), 'contact_name' => $this->input->post('contact_name'), 'contact_number' => $this->input->post('contact_number'), 'email_address' => $this->input->post('email_address'), ); $this->pals_model->update($id, $data); redirect(base_url('contacts')); } } public function delete($id) { $this->load->model('cities_model'); $header['title'] = 'Delete Contact'; $data['cities'] = $this->cities_model->get_all(); $data['pal'] = $this->pals_model->get_by_id($id); $this->load->view('header',$header); $this->load->view('contacts/delete',$data); $this->load->view('footer'); } public function destroy($id){ $this->pals_model->delete($id); redirect(base_url('contacts')); } }
Visualizações do Gerenciador de Contatos
Já analisamos formulários e validação em CodeNos tutoriais anteriores, usamos o Igniter e, para isso, utilizaremos o código que desenvolvemos lá. Para que fique completo, as visualizações da nossa aplicação serão as seguintes:
Você pode baixar o código das visualizações clicando no link abaixo:
CodeVisualizações do Gerenciador de Contatos do Igniter Download


