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.

Modelos de bases de datos CodeIgniter

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.

Vistas del administrador de contactos

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.

Resumir este post con: