CodeIgniter Active Record: Inserir, Atualizar, Excluir consultas
⚡ Resumo Inteligente
CodeIgniter Active Record é um padrão de projeto que permite que um modelo leia e grave no banco de dados com cadeias de métodos simples e seguras. Ele suporta operações de inserção, seleção, atualização e exclusão em diferentes mecanismos de banco de dados sem a necessidade de reescrever o código, além de parametrizar a entrada para evitar injeção de SQL.
Os dados são a essência da maioria das aplicações. Precisam ser armazenados para que possam ser analisados, fornecendo insights e facilitando a tomada de decisões de negócios. Normalmente, os dados são armazenados em um banco de dados. Entre as principais preocupações ao interagir com um banco de dados estão a segurança, a facilidade de acesso e as implementações específicas de cada fornecedor de SQL (Structured Query Language).
Active Record é um padrão de projeto que facilita a interação com o banco de dados de forma segura e elegante. O Active Record possui as seguintes vantagens:
- Insira, atualize e exclua registros com cadeias de métodos simples.
- 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 e o SQL Server sem reescrever o código do aplicativo.
- CodeO Igniter utiliza drivers específicos para cada mecanismo de banco de dados em segundo plano.
Como usar o Active Record: Exemplo
Neste tutorial, usaremos um banco de dados de exemplo com duas tabelas: uma com pedidos e outra com detalhes. Este tutorial pressupõe que você já tenha um MySQL O banco de dados está instalado e em execução. 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 duas tabelas, orders e order_details. O relacionamento entre as duas tabelas é definido pela coluna id em orders e order_id em order_details.
CodeConfiguração do banco de dados Igniter
Agora vamos configurar nossa aplicação para se comunicar com este banco de dados. Abra o arquivo de configuração do banco de dados localizado em application/config/database.php e localize as seguintes linhas:
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
Atualize o código acima para o seguinte:
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
Observação: Você precisará substituir o nome de usuário e a senha pelos que correspondem aos seus dados. MySQL configuração.
Além dos detalhes de configuração do banco de dados, também precisamos informar CodeO Igniter carrega a biblioteca do banco de dados quando é carregado.
Passo 1) Abra o seguinte arquivo: application/config/autoload.php.
Passo 2) Localize as bibliotecas de chave 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.
CodeInserir registro ativo do Igniter
Para fins de teste, criaremos um controlador e definiremos rotas para interagir com nossa aplicação via Active Record. Crie um novo arquivo application/controllers/ActiveRecordController.php e adicione o seguinte código:
<?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 matriz chamada data que usa nomes de colunas de tabelas do banco de dados como chaves da matriz e atribui valores a elas.
- `$this->db->insert('orders', $data);` chama o método `insert` da biblioteca do banco de dados, passando o nome da tabela `orders` e a variável de array `$data`. Esta linha gera a instrução SQL `INSERT` usando as chaves do array como nomes de campos e os valores do array como os valores a serem inseridos.
Agora que criamos o método do controlador, precisamos criar uma rota que será chamada para executá-lo. Abra o arquivo application/config/routes.php e adicione a seguinte linha:
$route['ar/insert'] = 'activerecordcontroller/store_order';
Aqui:
- Definimos uma rota ar/insert que chama o método store_order do ActiveRecordController.
Vamos agora iniciar o servidor web para testar nosso método. Execute o seguinte comando para iniciar o servidor PHP integrado:
cd C:\Sites\ci-app php -S localhost:3000
Aqui:
- O comando acima navega até o diretório do projeto e inicia o servidor integrado na porta 3000.
Carregue o seguinte URL No seu navegador: http://localhost:3000/ar/insertVocê obterá o seguinte resultado:
order has successfully been created
Abra o MySQL Acesse o banco de dados do tutorial e verifique a tabela de pedidos. Você verá a linha recém-criada, conforme mostrado na imagem abaixo:
CodeIgniter Seleciona Registro Ativo
Nesta seção, veremos como ler os registros do banco de dados e exibi-los no navegador da web 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('orders'); executa a consulta select na tabela orders, selecionando todos os campos.
- eco “ Lista de Pedidos "; exibe um cabeçalho HTML."
- eco “ ”; imprime a tag de abertura para uma lista HTML não ordenada.
- foreach ($query->result() as $row) {…} percorre os resultados retornados do banco de dados e exibe “ $row->customer_name "; imprime o nome do cliente."
Antes de carregar o URLVocê pode adicionar mais alguns registros ao banco de dados. Agora, vamos definir uma rota para a consulta SELECT. Abra o arquivo application/config/routes.php e adicione a seguinte rota:
$route['ar'] = 'activerecordcontroller';
Aqui:
- A rota `ar` aponta para o método `index` da classe `ActiveRecordController`. Este é o comportamento padrão, razão pela qual não especificamos o método `index`, como fizemos para a rota que insere registros.
Supondo que o servidor web já esteja em execução, carregue o seguinte: URL: http://localhost:3000/arVocê deverá ver resultados semelhantes aos seguintes no seu navegador:
CodeRegistro ativo de atualização do Igniter
Nesta seção, falaremos sobre como usar o Active Record para atualizar o banco de dados. Suponha que queiramos 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 produz a seguinte instrução SQL:
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
Vamos agora atualizar o arquivo application/config/routes.php e adicionar a seguinte rota:
$route['ar/update'] = 'activerecordcontroller/update_order';
Salve as alterações e carregue o seguinte URL no navegador web:
Vamos agora exibir os registros do banco de dados e verificar se a alteração teve efeito.
Como você pode ver na imagem acima, o primeiro registro foi atualizado de Joe Thomas para Joe.
CodeExcluir registro ativo do Igniter
Agora vamos excluir um registro do banco de dados. Vamos excluir 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', 3); define a cláusula where.
- $this->db->delete('orders'); 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 No seu navegador web: http://localhost:3000/ar/delete.





