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.

Modelos de banco de dados CodeIgniter

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

Visualizações do Gerenciador de Contatos

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.