Banco de dados CodeIgniter: configuração, edição, atualização, exclusão de dados
Banco de dados Codeigniter
No tutorial anterior, cobrimos os fundamentos do registro ativo do CodeIgniter 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 de banco de dados. se você é totalmente novo no trabalho com bancos de dados no CodeIgniter, então é aconselhável ler o tutorial anterior
Configuração do banco de dados Codeigniter
Começaremos criando o banco de dados do projeto do tutorial. Criaremos um banco de dados simples para gerenciar detalhes de contato. Criaremos um banco de dados simples com duas (2) tabelas com nomes de amigos e cidades em que eles moram. O relacionamento entre amigos e cidades é um para um com id em cidades como a chave primária e city_id como a chave estrangeira nas tabelas de amigos .
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 de cidades
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ;
Modelos de banco de dados CodeIgniter
Agora criaremos 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.
No CodeIgniter, cada modelo deve definir os métodos que irá suportar. Em vez de repetir o mesmo código em cada modelo, aproveitaremos a herança na programação orientada a objetos e criaremos uma classe de modelo pai que definirá os métodos básicos que desejamos 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 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 |
5 | inserir | Insere um novo registro no banco de dados |
6 | atualizar | Atualiza um registro de banco de dados existente com base na chave primária do tipo INT denominada id |
7 | excluir | Exclui um registro existente do banco de dados com base na chave primária do tipo INT denominada 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
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,
- $tabela protegida = ”; define uma variável protegida chamada tabela. Isso será preenchido pela respectiva classe filha para especificar com qual tabela nossos métodos de classe do modelo base devem interagir.
- função pública __construct() {…} define o método construtor e executa o método construtor da classe pai CI_Model.
- get_all() {…} usa a biblioteca de banco de dados e o valor da variável $table para executar a consulta SELECT em nosso banco de dados.
- get_by_id($id) {…} define o método para recuperar uma única linha do banco de dados e aceita um parâmetro $id que deve ser do tipo de dados INT.
- get_where($where) {…} define o método get que permite definir uma cláusula where.
- insert($data) {…} define o método insert e aceita o parâmetro do array $data que contém os valores a serem gravados no banco de dados.
- update($id, $data) {…} define o método de atualização e aceita o parâmetro do array $data que contém os valores a serem atualizados no banco de dados.
- delete($id) {…} define o método delete que aceita um parâmetro de $id que deve ser do tipo de dados INT.
agora que terminamos com a classe do modelo pai, vamos criar nossos modelos Pals
Crie um novo arquivo em application/models/Pals.php
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 estende BaseModel {…} estende o modelo pai BaseModel e automaticamente faz com que todos os métodos definidos no BaseModel sejam acessados pela classe filha.
- protegido $tabela = 'amigos'; define o nome da tabela associada ao nosso modelo pai
- __construct() {…} inicializa o construtor pai
- função pública get_by_id($id) {…} substitui get_by_id para fornecer implementação personalizada específica para o modelo Pals. A consulta para get_by_id usa uma junção para recuperar o nome da cidade da tabela de cidades
- função pública get_all() {…} substitui o método get_all para implementar uma consulta de junção entre amigos e tabelas de cidades
Crie um novo arquivo em application/models/Cities.php
<?php class Cities 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 no código fornecido acima, Herança nos economiza muito tempo ao trabalhar com modelos no CodeIgniter. Na próxima seção, aprenderemos
Controladores do Gerenciador de Contatos
Agora que criamos os modelos, vamos criar os controladores para nossa aplicação. Teremos dois controladores, nomeadamente Contatos e Cidades
Vamos começar pelas cidades
Crie um novo arquivo Cities.php no diretório application/controllers
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
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á vimos formulários e validação no CodeIgniter nos tutoriais anteriores. Usaremos o código que desenvolvemos nos tutoriais anteriores. Para completar, reproduziremos o código que criamos nos tutoriais anteriores.
As visualizações do nosso aplicativo serão as seguintes
Você pode baixar o código para as visualizações acima clicando no link abaixo
Download de visualizações do Gerenciador de contatos do CodeIgniter
Resumo
Neste tutorial, você aprenderá como criar modelos em CodeIgniter. Aproveitamos a herança na programação orientada a objetos para promover a reutilização de código, criando um modelo básico que implementa as quatro principais operações de banco de dados: inserção, leitura, atualização e exclusão.
Demonstramos os conceitos usando uma aplicação prática e continuaremos a fazê-lo nos próximos tutoriais adicionando mais funcionalidades à aplicação.