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.

  • 🗄️ Esquema: Duas tabelas relacionadas, amigos e cidades, modelam uma relação um-para-um por meio de chave estrangeira.
  • ⚙️ Config: O arquivo database.php estabelece a conexão e a biblioteca do banco de dados é carregada.
  • 🧬 Modelo base: Um modelo pai define get_all, get_by_id, get_where, insert, update e delete.
  • ðŸ'¨â € ðŸ '© â € ðŸ'§ Herança: Pals e Cities estendem BaseModel, portanto, reutilizam seus métodos e os sobrescrevem quando necessário.
  • 🔗 Junta-se: O modelo Pals conecta cidades para obter o nome da cidade juntamente com os detalhes de contato.
  • 🎛️ Controladores: Os controladores de Cidades e Contatos integram modelos, formulários e validação.
  • ♻️ Reuso: A herança elimina a repetição de código CRUD e mantém os modelos enxutos.

CodeBanco de dados Igniter

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.

Diagrama de classes do BaseModel com modelos Pals e Cities

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:

Visualizações do gerenciador de contatos

Você pode baixar o código das visualizações clicando no link abaixo:

CodeVisualizações do Gerenciador de Contatos do Igniter Download

Perguntas Frequentes

Um modelo base (BaseModel) contém os métodos compartilhados de inserção, leitura, atualização e exclusão uma única vez. Os modelos filhos os herdam e sobrescrevem apenas o que for diferente, o que elimina a duplicação e mantém cada modelo pequeno.

Cada contato armazena um `city_id`, não o nome da cidade. A função de sobrescrita une a tabela de cidades para que a consulta retorne o nome legível da cidade junto com cada contato em um único resultado.

O controlador carrega o modelo, valida o formulário enviado e salva os dados e redireciona, ou recarrega o formulário com os erros. Ele conecta o modelo, as visualizações e a biblioteca de validação.

Sim. A partir das definições das suas tabelas, a IA pode gerar um modelo base com métodos CRUD e um modelo filho por tabela, adicionando substituições de junção onde uma chave estrangeira precisa de um rótulo legível. RevVeja as junções geradas.

A biblioteca de banco de dados fornece a consulta bruta e os métodos do Active Record. Um modelo encapsula essas chamadas em operações significativas e reutilizáveis ​​para uma tabela específica, mantendo-as organizadas.ping Acesso a dados a partir do controlador.

Resuma esta postagem com: