Base de datos CodeIgniter: configuración, edición, actualización, eliminación de datos
Base de datos Codeigniter
En el tutorial anterior, cubrimos los conceptos básicos del registro activo de CodeIgniter y cómo insertar, actualizar, eliminar y leer registros de la base de datos. En este tutorial, crearemos modelos de bases de datos y usaremos formularios para crear y actualizar registros de bases de datos. Si es completamente nuevo en el trabajo con bases de datos en CodeIgniter, le recomendamos leer el tutorial anterior.
Configuración de la base de datos de Codeigniter
Comenzaremos creando la base de datos del proyecto del tutorial. Crearemos una base de datos simple para administrar los datos de contacto. Crearemos una base de datos simple con dos (2) tablas con los nombres de los amigos y las ciudades en las que viven. La relación entre los amigos y las ciudades es de uno a uno, con id en las ciudades como clave principal y city_id como clave externa en las tablas de 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 creemos la tabla de ciudades.
CREATE TABLE `cities` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(245) DEFAULT NULL, PRIMARY KEY (`id`) ) ;
Modelos de bases de datos CodeIgniter
Ahora crearemos modelos para nuestra base de datos. El modelo es la parte M del MVC. El modelo se ocupa del acceso a los datos, la manipulación de datos y la lógica empresarial.
En CodeIgniter, cada modelo tiene que definir los métodos que admitirá. En lugar de repetir el mismo código en cada modelo, aprovecharemos la herencia en la programación orientada a objetos y crearemos una clase de modelo principal que definirá los métodos básicos que deseamos 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 | Descripción |
|---|---|---|
| 1 | __construir | Define el método constructor que llama al método constructor principal. |
| 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 principal de tipo INT denominada id |
| 4 | llegar a dónde | Recupera todos los campos de la base de datos según los criterios basados en |
| 5 | insertar | Inserta un nuevo registro en la base de datos. |
| 6 | actualización | Actualiza un registro de base de datos existente según la clave principal de tipo INT denominada id |
| 7 | elimínelo | Elimina un registro existente de la base de datos según la clave principal de tipo INT denominada 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.
Crearemos dos modelos como se describe en la imagen de arriba.
Cree una nueva clase BaseModel en application/models/BaseModel.php
Añade 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Í,
- protegida $tabla = ”; define una variable protegida denominada tabla. Esto será completado por la clase secundaria respectiva para especificar con qué tabla deben interactuar nuestros métodos de clase del modelo base.
- La función pública __construct() {…} define el método constructor y ejecuta el método constructor de la clase principal CI_Model.
- get_all() {…} usa la biblioteca de la base de datos y el valor de la variable $table para ejecutar la consulta SELECT en nuestra base de datos.
- get_by_id($id) {…} define el método para recuperar una sola fila de la base de datos y acepta un parámetro $id que debe ser de tipo de datos INT.
- get_where($where) {…} define el método get que le permite establecer una cláusula donde.
- insert($data) {…} define el método de inserción y acepta el parámetro de matriz $data que contiene los valores que se escribirán en la base de datos.
- update($id, $data) {…} define el método de actualización y acepta el parámetro de matriz $data que contiene los valores a actualizar en la base de datos.
- eliminar($id) {…} define el método de eliminación que acepta un parámetro de $id que debe ser de tipo de datos INT.
Ahora que hemos terminado con la clase de modelo principal, creemos nuestros modelos Pals.
Crea un nuevo archivo en application/models/Pals.php
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Í,
- class Pals extends BaseModel {…} extiende el modelo principal BaseModel y automáticamente hace que todos los métodos definidos en BaseModel accedan a la clase secundaria.
- tabla $ protegida = 'amigos'; define el nombre de la tabla asociada con nuestro modelo principal
- __construct() {…} inicializa el constructor padre
- La función pública get_by_id($id) {…} anula get_by_id para proporcionar una implementación personalizada específica del modelo Pals. La consulta de get_by_id utiliza una combinación para recuperar el nombre de la ciudad de la tabla de ciudades.
- La función pública get_all() {…} anula el método get_all para implementar una consulta de unión entre la tabla de amigos y ciudades.
Crea un nuevo archivo en application/models/Cities.php
<?php
class Cities 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 en el código anterior, la herencia nos ahorra mucho tiempo cuando trabajamos con modelos en CodeIgniter. En la siguiente sección aprenderemos
Controladores del administrador de contactos
Ahora que hemos creado los modelos, creemos los controladores para nuestra aplicación. Tendremos dos controladores, a saber, Contactos y Ciudades.
Empecemos por las ciudades.
Cree un nuevo archivo Cities.php en el directorio aplicación/controladores
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.
Cree otro archivo Contacts.php en aplicación/controladores
Añade 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 vimos formularios y validación en CodeIgniter en los tutoriales anteriores. Usaremos el código que desarrollamos en los tutoriales anteriores. Para completar, reproduciremos el código que creamos en los tutoriales anteriores.
Las vistas de nuestra aplicación serán las siguientes.
Puede descargar el código para las vistas anteriores haciendo clic en el enlace a continuación
Descarga de vistas del Administrador de contactos de CodeIgniter
Resumen
En este tutorial, aprenderá cómo crear modelos en CodeIgniterAprovechamos la herencia en la programación orientada a objetos para promover la reutilización del código mediante la creación de un modelo base que implementa las cuatro operaciones principales de la base de datos: inserción, lectura, actualización y eliminación.
Hemos demostrado los conceptos utilizando una aplicación práctica y continuaremos haciéndolo en los próximos tutoriales agregando más funciones a la aplicación.


