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 Inserir Registro Ativo

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

CodeIgniter Selecionar Registro Ativo

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

Registro ativo de atualização do CodeIgniter

Vamos agora exibir os registros do banco de dados e ver se as alterações foram afetadas.

Registro ativo de atualização do CodeIgniter

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.