Codeigniter Active Record: Inserir, Selecionar, Atualizar, Excluir
Os dados são a linhagem da maioria dos aplicativos. Os dados precisam ser armazenados de forma que possam ser analisados posteriormente para fornecer insights e facilitar decisões de negócios. Os dados geralmente são armazenados no banco de dados. Entre as principais preocupações ao interagir com o banco de dados está a segurança, a facilidade de acesso e as implementações de Structured Query Language (SQL) específicas do fornecedor do banco de dados.
Registro ativo é um padrão de design que facilita a interação com o banco de dados de maneira fácil, segura e eloqüente.
O registro ativo tem as seguintes vantagens
- Insira, atualize e exclua registros com cadeias de métodos simples de registro ativo
- Envia a entrada do usuário de forma segura usando parâmetros
- Permite que você trabalhe com vários mecanismos de banco de dados, como MySQL, SQL Server, etc. sem reescrever o código do aplicativo
- CodeIgniter usa drivers específicos para cada mecanismo de banco de dados em segundo plano.
Como usar o Active Record: exemplo
Neste tutorial, discutiremos o banco de dados do tutorial. Teremos duas mesas, uma com pedidos e outra com detalhes.
Este tutorial pressupõe que você tenha MySQL banco de dados instalado e funcionando.
Execute os seguintes scripts para criar o banco de dados do tutorial:
CREATE SCHEMA ci_active_record; USE ci_active_record; CREATE TABLE `order_details` ( `id` int(11) NOT NULL AUTO_INCREMENT, `order_id` int(11) DEFAULT NULL, `item` varchar(245) DEFAULT NULL, `quantity` int(11) DEFAULT '0', `price` decimal(10,2) DEFAULT '0.00', `sub_total` decimal(10,2) DEFAULT '0.00', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT = 1; CREATE TABLE `orders` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date` timestamp NULL DEFAULT NULL, `customer_name` varchar(245) DEFAULT NULL, `customer_address` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT = 1;
O código acima cria um banco de dados chamado ci_active_record e cria duas tabelas, nomeadamente pedidos e detalhes de pedidos. O relacionamento entre as duas tabelas é definido pela coluna id em pedidos e order_id na tabela order_details.
Configuração do banco de dados CodeIgniter
Vamos agora configurar nossa aplicação para poder se comunicar com esse banco de dados.
Abra o arquivo de configuração do banco de dados localizado em application/config/database.php
localize as seguintes linhas no arquivo de configuração
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
Atualize o código acima para o seguinte
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
Nota: você precisará substituir o nome de usuário e a senha por aqueles que correspondem à sua configuração de MySQL.
Além dos detalhes de configuração do banco de dados, também precisamos dizer ao CodeIgniter para carregar a biblioteca do banco de dados quando ela carregar
Passo 1) Abra o seguinte arquivo application/config/autoload.php
Passo 2) Localize as bibliotecas de chaves do array $autoload e carregue a biblioteca do banco de dados conforme mostrado abaixo
$autoload['libraries'] = array('database');
AQUI,
- O código acima carrega a biblioteca do banco de dados quando o aplicativo é iniciado
CodeIgniter Inserir Registro Ativo
Para fins de teste, criaremos um controlador e definiremos rotas que usaremos para interagir com nossa aplicação via registro ativo.
Crie um novo arquivo application/controllers/ActiveRecordController.php
Adicione o seguinte código ao ActiveRecordController.php
<?php defined('BASEPATH') OR exit('No direct script access allowed'); class ActiveRecordController extends CI_Controller { public function store_order(){ $data = [ 'date' => '2018-12-19', 'customer_name' => 'Joe Thomas', 'customer_address' => 'US' ]; $this->db->insert('orders', $data); echo 'order has successfully been created'; } }
AQUI,
- $data = […] define uma variável de array data que usa nomes de tabelas de banco de dados como chaves de array e atribui valores a eles
- $this->db->insert('pedidos', $dados); chama o método insert da biblioteca de banco de dados, passa os nomes da tabelaordens e a variável de array $data como parâmetro. Esta linha gera a instrução SQL INSERT usando as chaves do array como nomes de campos e os valores do array como valores a serem inseridos no banco de dados.
Agora que criamos com sucesso o método controlador para registro ativo, precisaremos criar uma rota que chamaremos para executar o método controlador.
Agora abra rotas.php em application/config/routes.php
adicione a seguinte linha às rotas
$route['ar/insert'] = 'activerecordcontroller/store_order';
AQUI,
- Definimos uma rota ar/insert que chama store_order do ActiveRecordController.
Vamos agora iniciar o servidor web para testar nosso método.
Execute o seguinte comando para iniciar o servidor integrado para PHP
cd C:\Sites\ci-app php -S localhost:3000
AQUI,
- O comando acima navega para a linha de comando e inicia o servidor integrado na porta 3000.
Carregue o seguinte URL em seu navegador
http://localhost:3000/ar/insert
Você obterá os seguintes resultados
order has successfully been created
Abra o MySQL banco de dados do tutorial e verifique a tabela de pedidos
Você poderá criar a linha recém-criada conforme mostrado na imagem abaixo
CodeIgniter Selecionar Registro Ativo
Nesta seção veremos como ler os registros que temos no banco de dados e exibi-los no navegador como uma lista não ordenada
Adicione o seguinte método ao ActiveRecordController
public function index() { $query = $this->db->get('orders'); echo "<h3>Orders Listing</h3>"; echo "<ul>"; foreach ($query->result() as $row) { echo "<li>$row->customer_name</li>"; } echo "</ul>"; }
AQUI,
- $query = $this->db->get('pedidos'); executa a consulta de seleção na tabela de pedidos selecionando todos os campos
- eco “ Listagem de pedidos ”; exibe um cabeçalho HTML de tamanho 4
- eco “ ”; imprime a tag de abertura para lista HTML não ordenada
- foreach ($query->result() as $row) {…} usou o loop for para percorrer os resultados retornados do banco de dados. eco “ $linha->nome_do_cliente ”; imprime o customer_name do banco de dados
Antes de carregar o seguinte URL, você pode carregar mais alguns registros no banco de dados.
Vamos agora definir uma rota para a consulta SELECT
Abra a tabela application/config/routes.php
Adicione a seguinte rota
$route['ar'] = 'activerecordcontroller';
AQUI,
- A rota ar aponta para o método de índice da classe ActiveRecordController. É por isso que não especificamos o método de índice como você fez para a rota que insere registros
Supondo que o servidor web já esteja em execução, carregue o seguinte URL
http://localhost:3000/ar
Você deverá conseguir ver resultados muito semelhantes aos seguintes em seu navegador da web
Registro ativo de atualização do CodeIgniter
Nesta seção falaremos sobre como usar o registro ativo para atualizar o banco de dados. Digamos que queremos atualizar o nome do cliente Joe Thomas para Joe.
Adicione o seguinte método à classe ActiveRecordController
public function update_order() { $data = [ 'customer_name' => 'Joe', ]; $this->db->where('id', 1); $this->db->update('orders', $data); echo 'order has successfully been updated'; }
AQUI,
- $data = […] define os campos e valores que desejamos atualizar na tabela do banco de dados
- $this->db->where('id', 1); define a cláusula where da consulta de atualização
- $this->db->update('pedidos', $dados); gera a consulta de atualização SQL e a executa em nosso banco de dados.
O código acima produzirá a seguinte instrução SQL
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
Vamos agora atualizar o route.php application/config/routes.php
Adicione a seguinte rota
$route['ar/update'] = 'activerecordcontroller/update_order';
Salve as alterações
Carregue o seguinte URL no navegador da web
Vamos agora exibir os registros do banco de dados e ver se as alterações foram afetadas.
Como você pode ver na imagem acima, o primeiro registro foi atualizado de Joe Thomas para Joe.
CodeIgniter Excluir registro ativo
Vamos agora excluir um registro do banco de dados. Excluiremos o registro com o id 3.
Adicione o seguinte método ao ActiveRecordController
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
AQUI,
- $this->db->where('id', 1); define a cláusula where
- $this->db->delete('pedidos'); exclui a linha do banco de dados na tabela de pedidos com base nos critérios definidos usando a cláusula where.
Para executar o código acima, carregue o seguinte URL em nosso navegador
http://localhost:3000/ar/delete
Resumo
Neste tutorial você aprendeu como trabalhar com um registro ativo para inserir, atualizar, excluir e selecionar registros do banco de dados. Trabalhamos com valores estáticos para criar registros, atualizar e excluir. No próximo tutorial, criaremos uma interface de usuário que o usuário poderá usar para criar registros dinamicamente no banco de dados.