CodeBase de datos de Igniter: Configuración, actualización y eliminación de datos

⚡ Resumen inteligente

CodeIgniter Database crea modelos y controladores para un gestor de contactos respaldado por MySQLUn BaseModel compartido implementa las operaciones de inserción, lectura, actualización y eliminación, y los modelos secundarios Pals y Cities lo heredan, de modo que los controladores reutilizan las mismas operaciones de base de datos en toda la aplicación.

  • 🗄️ Esquema: Dos tablas relacionadas, amigos y ciudades, modelan una relación uno a uno mediante clave externa.
  • ⚙️ Config: El archivo database.php establece la conexión y se carga la biblioteca de la base de datos.
  • 🧬 Modelo base: Un modelo padre define get_all, get_by_id, get_where, insert, update y delete.
  • 🇧🇷 Herencia: Pals y Cities extienden BaseModel, por lo que reutilizan sus métodos y los sobrescriben cuando es necesario.
  • 🔗 Se une a: El modelo Pals combina ciudades para obtener el nombre de la ciudad junto con los datos de contacto.
  • 🎛️ Controladores: Los controladores de Ciudades y Contactos integran modelos, formularios y validación.
  • ♻️ Reutilizar: La herencia elimina el código CRUD repetido y mantiene los modelos sencillos.

CodeBase de datos Igniter

CodeBase de datos Igniter

En el tutorial anterior, cubrimos los conceptos básicos de CodeIgniter Active Record y cómo insertar, actualizar, eliminar y leer registros de la base de datos. En este tutorial, crearemos modelos de base de datos y utilizaremos formularios para crear y actualizar registros de la base de datos. Si eres completamente nuevo en el trabajo con bases de datos en CodeIgniter, se le recomienda leer el tutorial anterior de antemano.

CodeConfiguración de la base de datos de Igniter

Comenzaremos creando la base de datos del proyecto tutorial. Crearemos una base de datos sencilla para gestionar los datos de contacto, con dos tablas llamadas "amigos" y "ciudades donde viven". La relación entre "amigos" y "ciudades" es uno a uno, con el campo "id" en "ciudades" como clave primaria y "city_id" como clave foránea en la tabla "amigos".

Ejecute los siguientes scripts para crear la base de datos:

CREATE TABLE `pals` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`city_id` int(11) DEFAULT NULL,
`contact_name` varchar(245) DEFAULT NULL,
`contact_number` varchar(245) DEFAULT NULL,
`email_address` varchar(245) DEFAULT NULL,
PRIMARY KEY (`id`)
);

Ahora vamos a crear la tabla de ciudades:

CREATE TABLE `cities` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(245) DEFAULT NULL,
PRIMARY KEY (`id`)
);

CodeModelos de bases de datos de Igniter

Ahora crearemos modelos para nuestra base de datos. El modelo es la parte M de la MVC. El modelo se ocupa del acceso a los datos, la manipulación de datos y la lógica empresarial.

In CodeEn Igniter, cada modelo debe definir los métodos que admitirá. En lugar de repetir el mismo código en cada modelo, aprovecharemos la herencia de la programación orientada a objetos y crearemos una clase de modelo padre que defina los métodos básicos que queremos que admitan nuestros modelos.

La siguiente tabla muestra los métodos que definiremos y cómo se accederá a los datos.

S / N Método Mareas Ideales para Lecciones
1 __construir Define el método constructor que llama al método constructor padre.
2 obtener toda Recupera todos los campos y registros de la base de datos sin ninguna condición.
3 obtener_por_id Recupera una sola fila de la base de datos utilizando la clave primaria de tipo INT llamada id.
4 llegar a dónde Recupera todos los campos de la base de datos según los criterios especificados.
5 insertar Inserta un nuevo registro en la base de datos.
6 actualización Actualiza un registro de base de datos existente basándose en la clave primaria de tipo INT llamada id.
7 eliminar Elimina un registro existente de la base de datos basándose en la clave primaria de tipo INT llamada id.

La siguiente imagen muestra el diagrama de clases y cómo los modelos secundarios Pals y Cities se relacionan con el modelo principal BaseModel.

Diagrama de clases del modelo BaseModel con los modelos Pals y Cities.

Crearemos dos modelos como se describe en la imagen anterior. Crea una nueva clase BaseModel en application/models/BaseModel.php y agrega el siguiente código:

<?php

class BaseModel extends CI_Model {

protected $table = '';

public function __construct() {
parent::__construct();
}

public function get_all() {
return $this->db->get($this->table)
->result();
}

public function get_by_id($id) {
return $this->db->get_where($this->table, array('id' => $id))
->row();
}

public function get_where($where) {
return $this->db->where($where)
->get($this->table)
->result();
}

public function insert($data) {
return $this->db->insert($this->table, $data);
}

public function update($id, $data) {
$this->db->where('id', $id);
$this->db->update($this->table, $data);
}

public function delete($id) {
$this->db->where('id', $id);
$this->db->delete($this->table);
}
}

Aquí:

  • protected $table = ”; define una variable protegida llamada table. Esta es rellenada por la clase hija correspondiente para especificar con qué tabla deben interactuar los métodos del modelo base.
  • La función pública __construct() {…} define el constructor y ejecuta el constructor de la clase padre CI_Model.
  • get_all() {…} utiliza la biblioteca de la base de datos y el valor de $table para ejecutar la consulta SELECT.
  • get_by_id($id) {…} recupera una sola fila y acepta un parámetro $id de tipo de datos INT.
  • get_where($where) {…} define un método get que le permite establecer una cláusula where.
  • insert($data) {…} acepta el parámetro de matriz $data que contiene los valores que se escribirán en la base de datos.
  • update($id, $data) {…} acepta el parámetro de matriz $data que contiene los valores que se van a actualizar.
  • delete($id) {…} acepta un parámetro $id de tipo de datos INT.

Ahora que hemos terminado con la clase del modelo padre, vamos a crear nuestro modelo Pals. Crea un nuevo archivo en application/models/Pals_model.php y añade el siguiente código:

<?php

class Pals_model extends BaseModel {

protected $table = 'pals';

public function __construct() {
parent::__construct();
}

public function get_by_id($id) {
$this->db->where('pals.id', $id);
$this->db->select('pals.*,cities.name');
$this->db->from('pals');
$this->db->join('cities', 'pals.city_id = cities.id');
$query = $this->db->get();
return $query->row();
}

public function get_all() {
$this->db->select('pals.*,cities.name');
$this->db->from('pals');
$this->db->join('cities', 'pals.city_id = cities.id');
$query = $this->db->get();
return $query->result();
}
}

Aquí:

  • La clase Pals_model extiende BaseModel {…} extiende el modelo padre BaseModel y automáticamente hace que todos sus métodos sean accesibles a la clase hija.
  • protected $table = 'pals'; define el nombre de la tabla asociada con este modelo.
  • __construct() {…} inicializa el constructor padre.
  • La función pública get_by_id($id) {…} sobrescribe get_by_id para proporcionar una implementación personalizada. La consulta utiliza una unión para recuperar el nombre de la ciudad de la tabla cities.
  • La función pública get_all() {…} sobrescribe get_all para implementar una consulta de unión entre las tablas pals y cities.

Crea un nuevo archivo en application/models/Cities_model.php:

<?php
class Cities_model extends BaseModel {
protected $table = 'cities';

public function __construct() {
parent::__construct();
}
}

Aquí:

  • protegida $tabla = 'ciudades'; define la tabla de la base de datos del modelo.

Como puede ver, la herencia nos ahorra mucho tiempo al trabajar con modelos en CodeEncendedor.

Controladores del administrador de contactos

Ahora que hemos creado los modelos, vamos a crear los controladores para nuestra aplicación. Tendremos dos controladores: Ciudades y Contactos. Empecemos con Ciudades. Crea un nuevo archivo llamado Cities.php en el directorio application/controllers y añade el siguiente código:

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Cities extends CI_Controller {

public function __construct() {
parent::__construct();
$this->load->helper('url', 'form');
$this->load->library('form_validation');
$this->load->model('cities_model');
}

public function index() {
$header['title'] = 'Cities Listing';
$data['pals'] = $this->cities_model->get_all();

$this->load->view('header',$header);
$this->load->view('cities/index', $data);
$this->load->view('footer');
}

public function create() {
$header['title'] = 'Create City';

$this->load->view('header',$header);
$this->load->view('cities/create');
$this->load->view('footer');
}

public function store() {
$rules = array(
array(
'field' => 'name',
'label' => 'City Name',
'rules' => 'required'
)
);

$this->form_validation->set_rules($rules);

if ($this->form_validation->run() == TRUE) {
$data = array('name' => $this->input->post('name'));
$this->cities_model->insert($data);

redirect(base_url('cities'));
} else {
$header['title'] = 'Create City';

$this->load->view('header',$header);
$this->load->view('cities/create');
$this->load->view('footer');
}
}

public function edit($id) {
$header['title'] = 'Edit City';
$data['city'] = $this->cities_model->get_by_id($id);

$this->load->view('header', $header);
$this->load->view('cities/edit', $data);
$this->load->view('footer');
}

public function update($id) {
$rules = array(
array(
'field' => 'name',
'label' => 'City Name',
'rules' => 'required'
)
);

$this->form_validation->set_rules($rules);

if ($this->form_validation->run() == TRUE) {
$data = array('name' => $this->input->post('name'));
$this->cities_model->update($id,$data);

redirect(base_url('cities'));
} else {
$header['title'] = 'Edit City';
$data['city'] = $this->cities_model->get_by_id($id);

$this->load->view('header',$header);
$this->load->view('cities/create',$data);
$this->load->view('footer');
}
}

public function delete($id) {
$header['title'] = 'Delete City';
$data['city'] = $this->cities_model->get_by_id($id);

$this->load->view('header', $header);
$this->load->view('cities/delete', $data);
$this->load->view('footer');
}

public function destroy($id) {
$this->cities_model->delete($id);

redirect(base_url('cities'));
}
}

Aquí:

  • El código anterior implementa todos los métodos necesarios para crear, actualizar, eliminar y leer filas de la base de datos.

Crea otro archivo Contacts.php en application/controllers y agrega el siguiente código:

<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class Contacts extends CI_Controller {

public function __construct() {
parent::__construct();
$this->load->helper('url', 'form');
$this->load->library('form_validation');
$this->load->model('pals_model');
}

public function index() {
$header['title'] = 'Contacts List';
$data['pals'] = $this->pals_model->get_all();

$this->load->view('header', $header);
$this->load->view('contacts/index', $data);
$this->load->view('footer');
}

public function create() {
$this->load->model('cities_model');
$header['title'] = 'Create Contact';
$data['cities'] = $this->cities_model->get_all();

$this->load->view('header', $header);
$this->load->view('contacts/create', $data);
$this->load->view('footer');
}

public function store() {
$rules = array(
array(
'field' => 'contact_name',
'label' => 'Contact Name',
'rules' => 'required'
),
array(
'field' => 'contact_number',
'label' => 'Contact Number',
'rules' => 'required',
'errors' => array(
'required' => 'You must provide a %s.',
),
),
array(
'field' => 'email_address',
'label' => 'Email Address',
'rules' => 'required'
),
array(
'field' => 'city_id',
'label' => 'City',
'rules' => 'required'
)
);

$this->form_validation->set_rules($rules);

if ($this->form_validation->run() == FALSE) {
$this->load->model('cities_model');
$header['title'] = 'Create Contact';
$data['cities'] = $this->cities_model->get_all();

$this->load->view('header', $header);
$this->load->view('contacts/create', $data);
$this->load->view('footer');
} else {
$data = array(
'city_id' => $this->input->post('city_id'),
'contact_name' => $this->input->post('contact_name'),
'contact_number' => $this->input->post('contact_number'),
'email_address' => $this->input->post('email_address'),
);

$this->pals_model->insert($data);

redirect(base_url('contacts'));
}
}

public function edit($id) {
$this->load->model('cities_model');
$header['title'] = 'Edit Contact';
$data['cities'] = $this->cities_model->get_all();

$data['pal'] = $this->pals_model->get_by_id($id);

$this->load->view('header', $header);
$this->load->view('contacts/edit', $data);
$this->load->view('footer');
}

public function update($id) {
$rules = array(
array(
'field' => 'contact_name',
'label' => 'Contact Name',
'rules' => 'required'
),
array(
'field' => 'contact_number',
'label' => 'Contact Number',
'rules' => 'required',
'errors' => array(
'required' => 'You must provide a %s.',
),
),
array(
'field' => 'email_address',
'label' => 'Email Address',
'rules' => 'required'
),
array(
'field' => 'city_id',
'label' => 'City',
'rules' => 'required'
)
);

$this->form_validation->set_rules($rules);

if ($this->form_validation->run() == FALSE) {
$this->load->model('cities_model');
$header['title'] = 'Create Contact';
$data['cities'] = $this->cities_model->get_all();

$data['pal'] = $this->pals_model->get_by_id($id);

$this->load->view('header', $header);
$this->load->view('contacts/edit', $data);
$this->load->view('footer');
} else {
$data = array(
'city_id' => $this->input->post('city_id'),
'contact_name' => $this->input->post('contact_name'),
'contact_number' => $this->input->post('contact_number'),
'email_address' => $this->input->post('email_address'),
);

$this->pals_model->update($id, $data);

redirect(base_url('contacts'));
}
}

public function delete($id) {
$this->load->model('cities_model');
$header['title'] = 'Delete Contact';
$data['cities'] = $this->cities_model->get_all();

$data['pal'] = $this->pals_model->get_by_id($id);

$this->load->view('header',$header);
$this->load->view('contacts/delete',$data);
$this->load->view('footer');
}

public function destroy($id){
$this->pals_model->delete($id);

redirect(base_url('contacts'));
}
}

Vistas del administrador de contactos

Ya hemos analizado los formularios y la validación en CodeUtilizaremos Igniter en los tutoriales anteriores, y usaremos el código que desarrollamos allí. Para mayor claridad, las vistas de nuestra aplicación se verán así:

Vistas del administrador de contactos

Puedes descargar el código de las vistas haciendo clic en el siguiente enlace:

CodeDescarga de vistas del administrador de contactos de Igniter

Preguntas Frecuentes

Un BaseModel almacena una sola vez los métodos compartidos de inserción, lectura, actualización y eliminación. Los modelos hijos los heredan y solo sobrescriben lo que difiere, lo que elimina la duplicación y mantiene cada modelo pequeño.

Cada contacto almacena un ID de ciudad, no el nombre de la ciudad. La anulación une la tabla de ciudades para que la consulta devuelva el nombre legible de la ciudad junto con cada contacto en un único resultado.

El controlador carga el modelo, valida el formulario enviado y, o bien guarda los datos y redirige, o bien recarga el formulario con los errores. Conecta el modelo, las vistas y la biblioteca de validación.

Sí. A partir de las definiciones de tus tablas, la IA puede generar un modelo base con métodos CRUD y un modelo secundario por tabla, añadiendo anulaciones de unión donde una clave externa necesite una etiqueta legible. RevVea las uniones generadas.

La biblioteca de base de datos proporciona la consulta sin procesar y los métodos de Active Record. Un modelo envuelve esas llamadas en operaciones significativas y reutilizables para una tabla específica, manteniendoping Acceso a datos desde el controlador.

Resumir este post con: