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.

  • 🔗 Ideia central: O Active Record encapsula o SQL em chamadas de métodos como insert, get, update e delete.
  • 🛡️ Seguro: Os valores são passados ​​como parâmetros, o que protege contra injeção de SQL.
  • 🔄 Portátil: O mesmo código funciona em todos os lugares. MySQL, SQL Server e outros por meio de drivers de banco de dados.
  • ⚙️ Configuração: Configure o arquivo database.php e carregue automaticamente a biblioteca do banco de dados.
  • Inserção: $this->db->insert('table', $data) constrói e executa um comando INSERT.
  • 🔍 Selecione: $this->db->get('table') retorna as linhas para percorrer no loop.
  • ✏️ Atualizar e Excluir: Uma cláusula WHERE, juntamente com um comando UPDATE ou DELETE, altera ou remove linhas.

CodeCRUD de registro ativo do Igniter

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:

Nova linha de pedido inserida via Active Record

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:

Lista de pedidos selecionados via Active Record

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:

Mensagem de pedido atualizado com sucesso

Vamos agora exibir os registros do banco de dados e verificar se a alteração teve efeito.

Lista de pedidos mostrando o nome atualizado

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.

Perguntas Frequentes

O Active Record associa valores como parâmetros em vez de concatená-los na string SQL, portanto, a entrada do usuário não pode alterar a estrutura da consulta. Isso evita que o usuário altere a estrutura da consulta.ping Isso ocorre automaticamente para as operações de inserção, atualização e localização.

Sim. O Active Record gera SQL por meio de um driver para cada mecanismo, então a troca de um para outro não é necessária. MySQL Migrar para o SQL Server geralmente significa alterar a configuração, não o código do modelo, desde que você evite usar SQL específico do fornecedor.

A cláusula WHERE limita quais linhas a instrução afeta. Sem ela, uma atualização ou exclusão seria executada em todas as linhas da tabela, o que é um erro comum e custoso.

Sim. A IA pode reescrever um SELECT, INSERT, UPDATE ou DELETE como a cadeia equivalente de get, insert, update ou delete. Teste o resultado, pois junções complexas podem exigir o construtor de consultas em vez do Active Record simples.

O carregamento automático da biblioteca de banco de dados torna `$this->db` disponível em todos os controladores e modelos sem a necessidade de carregá-la a cada vez. Isso é conveniente quando a maior parte da aplicação se comunica com o banco de dados.

Resuma esta postagem com: