CodeIgniter Active Record: Consultas para insertar, actualizar y eliminar
⚡ Resumen inteligente
CodeIgniter Active Record es un patrón de diseño que permite a un modelo leer y escribir en la base de datos mediante cadenas de métodos sencillas y seguras. Admite inserciones, selecciones, actualizaciones y eliminaciones en diferentes motores de bases de datos sin necesidad de reescribir código, y parametriza la entrada para prevenir la inyección SQL.

Los datos son esenciales para la mayoría de las aplicaciones. Es necesario almacenarlos para poder analizarlos, obtener información valiosa y facilitar la toma de decisiones empresariales. Generalmente, los datos se almacenan en una base de datos. Entre las principales preocupaciones al interactuar con la base de datos se encuentran la seguridad, la facilidad de acceso y las implementaciones del lenguaje de consulta estructurado (SQL) específicas del proveedor de la base de datos.
Active Record es un patrón de diseño que facilita la interacción con la base de datos de forma segura y elegante. Active Record presenta las siguientes ventajas:
- Inserta, actualiza y elimina registros con cadenas de métodos sencillas.
- Envía la información del usuario de forma segura mediante parámetros.
- Le permite trabajar con múltiples motores de bases de datos como MySQL y SQL Server sin reescribir el código de la aplicación.
- CodeIgniter utiliza controladores específicos para cada motor de base de datos en segundo plano.
Cómo usar Active Record: Ejemplo
En este tutorial, utilizaremos una base de datos de ejemplo con dos tablas, una con pedidos y la otra con detalles. Este tutorial asume que usted tiene una MySQL Base de datos instalada y en funcionamiento. Ejecute los siguientes scripts para crear la base de datos del 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;
El código anterior crea una base de datos llamada ci_active_record y dos tablas: orders y order_details. La relación entre ambas tablas se define mediante la columna id en orders y order_id en order_details.
CodeConfiguración de la base de datos de Igniter
Ahora configuraremos nuestra aplicación para que se comunique con esta base de datos. Abra el archivo de configuración de la base de datos ubicado en application/config/database.php y localice las siguientes líneas:
'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '',
Actualiza el código anterior al siguiente:
'hostname' => 'localhost', 'username' => 'root', 'password' => 'letmein', 'database' => 'ci_active_record',
Nota: Deberá reemplazar el nombre de usuario y la contraseña con los que coincidan con su MySQL configuración.
Además de los detalles de configuración de la base de datos, también necesitamos decir CodeIgniter cargará la biblioteca de la base de datos cuando se cargue.
Paso 1) Abra el siguiente archivo: application/config/autoload.php.
Paso 2) Localice las bibliotecas de claves de la matriz $autoload y cargue la biblioteca de la base de datos como se muestra a continuación:
$autoload['libraries'] = array('database');
Aquí:
- El código anterior carga la biblioteca de la base de datos cuando se inicia la aplicación.
CodeEncendedor Insertar Registro Activo
Para fines de prueba, crearemos un controlador y definiremos rutas para interactuar con nuestra aplicación a través de Active Record. Cree un nuevo archivo application/controllers/ActiveRecordController.php y agregue el siguiente 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'; } }
Aquí:
- $data = […] define una variable de matriz llamada data que utiliza los nombres de las columnas de la tabla de la base de datos como claves de la matriz y les asigna valores.
- `$this->db->insert('orders', $data);` llama al método `insert` de la biblioteca de la base de datos, pasando el nombre de la tabla `orders` y la variable de matriz `$data`. Esta línea genera la instrucción SQL `INSERT` utilizando las claves de la matriz como nombres de campo y los valores de la matriz como valores a insertar.
Ahora que hemos creado el método del controlador, necesitamos crear una ruta que llamaremos para ejecutarlo. Abre application/config/routes.php y agrega la siguiente línea:
$route['ar/insert'] = 'activerecordcontroller/store_order';
Aquí:
- Definimos una ruta ar/insert que llama al método store_order del ActiveRecordController.
Ahora vamos a iniciar el servidor web para probar nuestro método. Ejecute el siguiente comando para iniciar el servidor PHP integrado:
cd C:\Sites\ci-app php -S localhost:3000
Aquí:
- El comando anterior navega hasta el directorio del proyecto e inicia el servidor integrado en el puerto 3000.
Cargar lo siguiente URL en tu navegador: http://localhost:3000/ar/insertObtendrás el siguiente resultado:
order has successfully been created
Abra el panel de MySQL Acceda a la base de datos del tutorial y revise la tabla de pedidos. Verá la fila recién creada, como se muestra en la imagen a continuación:
CodeIgniter Select Active Record
En esta sección, veremos cómo leer los registros de la base de datos y mostrarlos en el navegador web como una lista desordenada. Agregue el siguiente método al 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>"; }
Aquí:
- $query = $this->db->get('orders'); ejecuta la consulta select en la tabla orders, seleccionando todos los campos.
- eco “ Listado de pedidos ”; muestra un encabezado HTML.
- eco “ ”; imprime la etiqueta de apertura de una lista HTML no ordenada.
- foreach ($query->result() as $row) {…} recorre los resultados devueltos por la base de datos y muestra “ $row->nombre_del_cliente ”; imprime el nombre del cliente.
Antes de cargar el URLPuedes añadir un par de registros más a la base de datos. Ahora vamos a definir una ruta para la consulta SELECT. Abre application/config/routes.php y añade la siguiente ruta:
$route['ar'] = 'activerecordcontroller';
Aquí:
- La ruta `ar` apunta al método `index` de la clase `ActiveRecordController`. Este es el comportamiento predeterminado, por lo que no especificamos el método `index`, como sí lo hicimos para la ruta que inserta registros.
Suponiendo que el servidor web ya esté en funcionamiento, cargue lo siguiente URL: http://localhost:3000/arDeberías ver resultados similares a los siguientes en tu navegador web:
CodeActualización de Igniter Registro activo
En esta sección, hablaremos sobre cómo usar Active Record para actualizar la base de datos. Supongamos que queremos actualizar el nombre del cliente Joe Thomas a Joe. Agregue el siguiente método a la clase 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'; }
Aquí:
- $data = […] define los campos y valores que deseamos actualizar en la tabla de la base de datos.
- $this->db->where('id', 1); establece la cláusula where de la consulta de actualización.
- $this->db->update('órdenes', $datos); genera la consulta de actualización SQL y la ejecuta en nuestra base de datos.
El código anterior produce la siguiente sentencia SQL:
UPDATE orders SET customer_name = 'Joe' WHERE id = 1;
Ahora vamos a actualizar application/config/routes.php y añadir la siguiente ruta:
$route['ar/update'] = 'activerecordcontroller/update_order';
Guarda los cambios y carga lo siguiente. URL en el navegador web:
Ahora vamos a mostrar los registros de la base de datos y comprobar si el cambio ha surtido efecto.
Como puede verse en la imagen de arriba, el primer registro se ha actualizado de Joe Thomas a Joe.
CodeEliminar registro activo de Igniter
Ahora eliminaremos un registro de la base de datos. Eliminaremos el registro con el ID 3. Agregue el siguiente método al ActiveRecordController:
public function delete_order() { $this->db->where('id', 3); $this->db->delete('orders'); echo 'order has successfully been deleted'; }
Aquí:
- $this->db->where('id', 3); establece la cláusula where.
- $this->db->delete('orders'); elimina la fila de la base de datos en la tabla orders según los criterios establecidos mediante la cláusula where.
Para ejecutar el código anterior, cargue lo siguiente URL en su navegador web: http://localhost:3000/ar/delete.




