Baza de date CodeIgniter: Configurare, Editare, Actualizare, Ștergere a datelor

Baza de date Codeigniter

În tutorialul anterior, am acoperit elementele de bază ale înregistrării active CodeIgniter și cum să inserăm, să actualizăm, să ștergem și să citim înregistrările din baza de date. În acest tutorial, vom crea modele de baze de date și vom folosi formulare pentru a crea și actualiza înregistrările bazei de date. dacă sunteți complet nou în lucrul cu bazele de date în CodeIgniter, atunci v-ați sfătuit să citiți tutorialul anterior

Configurarea bazei de date Codeigniter

Vom începe prin a crea baza de date a proiectului tutorial. Vom crea o bază de date simplă pentru gestionarea detaliilor de contact. Vom crea o bază de date simplă cu două (2) tabele cu numele prietenilor și orașele în care locuiesc. Relația dintre prieteni și orașe este unu-la-unu cu id în orașe ca cheie primară și city_id ca cheie străină în tabelele prieteni. .

Rulați următoarele scripturi pentru a crea baza de date:

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`)
);

Acum să creăm tabelul orașelor

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

Modele de baze de date CodeIgniter

Acum vom crea modele pentru baza noastră de date. Modelul este partea M a MVC. Modelul tratează accesul la date, manipularea datelor și logica de afaceri.

În CodeIgniter, fiecare model trebuie să definească metodele pe care le va suporta. În loc să repetăm ​​același cod în fiecare model, vom profita de moștenirea în programarea orientată pe obiecte și vom crea o clasă de model părinte care va defini metodele de bază pe care dorim să le suporte modelele noastre.

Tabelul de mai jos arată metodele pe care le vom defini și cum vor fi accesate datele.

S / N Metodă Description
1 __construi Definește metoda constructorului care apelează metoda constructorului părinte
2 ia tot Preia toate câmpurile și înregistrările din baza de date fără nicio condiție
3 get_by_id Preia un singur rând din baza de date utilizând cheia primară de tip INT numită id
4 ajunge_unde Preia toate câmpurile din baza de date pe baza criteriilor
5 insera Inserează o înregistrare nouă în baza de date
6 actualizare Actualizează o înregistrare de bază de date existentă pe baza cheii primare de tip INT numită id
7 șterge Șterge o înregistrare existentă din baza de date pe baza cheii primare de tip INT numită id

Următoarea imagine arată diagrama de clasă și modul în care modelele copil Pals și Cities se raportează la modelul părinte BaseModel.

Modele de baze de date CodeIgniter

Vom crea două modele așa cum este descris în imaginea de mai sus

Creați o nouă clasă BaseModel în application/models/BaseModel.php

Adăugați următorul cod

<?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);
    }
}

AICI,

  • protejat $table = ”; definește o variabilă protejată numită tabel. Acesta va fi populat de clasa copil respectivă pentru a specifica cu ce tabel ar trebui să interacționeze metodele noastre de clasă model de bază.
  • funcția publică __construct() {…} definește metoda constructorului și execută metoda constructorului clasei părinte CI_Model.
  • get_all() {…} folosește biblioteca bazei de date și valoarea variabilei $table pentru a rula interogarea SELECT în baza noastră de date.
  • get_by_id($id) {…} definește metoda de preluare a unui singur rând din baza de date și acceptă un parametru $id care ar trebui să fie de tip de date INT.
  • get_where($where) {…} definește metoda get care vă permite să setați o clauză where.
  • insert($date) {…} definește metoda de inserare și acceptă parametrul de matrice $data care conține valorile de scris în baza de date.
  • update($id, $data) {…} definește metoda de actualizare și acceptă parametrul de matrice $data care conține valorile de actualizat în baza de date.
  • delete($id) {…} definește metoda de ștergere care acceptă un parametru al lui $id care ar trebui să fie de tipul de date INT.

Acum că am terminat cu clasa de model părinte, să creăm modelele noastre Pals

Creați un fișier nou în application/models/Pals.php

Adăugați următorul cod

<?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();
    }
}

AICI,

  • clasa Pals extinde BaseModel {…} extinde modelul părinte BaseModel și face automat accesate toate metodele definite în BaseModel la clasa copil.
  • protected $table = 'amicii'; definește numele tabelului asociat modelului nostru părinte
  • __construct() {…} inițializează constructorul părinte
  • funcția publică get_by_id($id) {…} suprascrie get_by_id pentru a oferi implementare personalizată specifică modelului Pals. Interogarea pentru get_by_id folosește o îmbinare pentru a prelua numele orașului din tabelul orașelor
  • funcția publică get_all() {…} suprascrie metoda get_all pentru a implementa o interogare de conectare între tabelul de prieteni și orașe

Creați un fișier nou în application/models/Cities.php

<?php
class Cities extends BaseModel {
    protected $table = 'cities';
    
    public function __construct() {
        parent::__construct();
    }
}

AICI,

protected $table = 'orașe'; definește tabelul bazei de date model.

După cum puteți vedea din codul de mai sus, Moștenirea ne economisește mult timp atunci când lucrăm cu modele în CodeIgniter. În secțiunea următoare, vom învăța

Controlori Manager Contacte

Acum că am creat modelele, să creăm controlerele pentru aplicația noastră. Vom avea doi controlori și anume Contacte și Orașe

Să începem cu orașele

Creați un fișier nou Cities.php în directorul aplicație/controlere

Adăugați următorul cod

<?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'));
    }
}

AICI,

Codul de mai sus implementează toate metodele necesare pentru a crea, actualiza, șterge și citi rânduri din baza de date.

Creați un alt fișier Contacts.php în aplicație/controlere

Adăugați următorul cod

<?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'));
    }
}

Vizualizări Manager Contacte

Am analizat deja formularele și validarea în CodeIgniter în tutorialele anterioare. Vom folosi codul pe care l-am dezvoltat în tutorialele anterioare. Pentru a fi complet, vom reproduce codul pe care l-am creat în tutorialele anterioare.

Părerile aplicației noastre vor fi după cum urmează

Vizualizări Manager Contacte

Puteți descărca codul pentru vizualizările de mai sus făcând clic pe linkul de mai jos

CodeIgniter Contacts Manager Vizualizări Descărcare

Rezumat

În acest tutorial, veți învăța cum să creați modele în CodeIgniter. Am profitat de moștenirea în programarea orientată pe obiecte pentru a promova reutilizarea codului prin crearea unui model de bază care implementează cele patru operațiuni majore ale bazei de date de inserare, citire, actualizare și ștergere.

Am demonstrat conceptele folosind o aplicație practică și vom continua să facem acest lucru în următoarele tutoriale, adăugând mai multe funcționalități aplicației.