CodeIgniter baza podataka: konfiguracija, uređivanje, ažuriranje, brisanje podataka

Baza podataka Codeigniter

U prethodnom vodiču pokrili smo osnove CodeIgniter aktivnog zapisa i kako umetati, ažurirati, brisati i čitati zapise iz baze podataka. U ovom ćemo vodiču izraditi modele baze podataka i koristiti obrasce za stvaranje i ažuriranje zapisa baze podataka. ako ste potpuno novi u radu s bazama podataka u CodeIgniteru, savjetujemo vam da pročitate prethodni vodič

Konfiguracija baze podataka Codeigniter

Počet ćemo s izradom baze podataka projekta tutorijala. Napravit ćemo jednostavnu bazu podataka za upravljanje kontakt podacima. Napravit ćemo jednostavnu bazu podataka s dvije (2) tablice imena prijatelja i gradova u kojima žive. Odnos između prijatelja i gradova je jedan-na-jedan s id-om u gradovima kao primarnim ključem i city_id kao stranim ključem u tablicama prijatelja .

Pokrenite sljedeće skripte za izradu baze podataka:

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

Kreirajmo sada tablicu gradova

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

CodeIgniter modeli baze podataka

Sada ćemo izraditi modele za našu bazu podataka. Model je M dio VMC. Model se bavi pristupom podacima, manipulacijom podacima i poslovnom logikom.

U CodeIgniteru svaki model mora definirati metode koje će podržavati. Umjesto ponavljanja istog koda u svakom modelu, iskoristit ćemo prednost nasljeđivanja u objektno orijentiranom programiranju i stvoriti roditeljsku klasu modela koja će definirati osnovne metode za koje želimo da naši modeli podržavaju.

Tablica u nastavku prikazuje metode koje ćemo definirati i kako će se pristupiti podacima.

S / N način Description
1 __konstruirati Definira metodu konstruktora koja poziva roditeljsku metodu konstruktora
2 dobiti_sve Dohvaća sva polja i zapise iz baze podataka bez ikakvih uvjeta
3 get_by_id Dohvaća jedan redak iz baze podataka pomoću primarnog ključa tipa INT pod nazivom id
4 dobiti_gdje Dohvaća sva polja iz baze podataka na temelju kriterija
5 INSERT Umeće novi zapis u bazu podataka
6 ažuriranje Ažurira postojeći zapis baze podataka na temelju primarnog ključa tipa INT pod nazivom id
7 izbrisati Briše postojeći zapis iz baze podataka na temelju primarnog ključa tipa INT pod nazivom id

Sljedeća slika prikazuje dijagram klasa i kako su podređeni modeli Pals i Cities povezani s nadređenim modelom BaseModel.

CodeIgniter modeli baze podataka

Napravit ćemo dva modela kao što je opisano na gornjoj slici

Napravite novu klasu BaseModel u aplikaciji/modeli/BaseModel.php

Dodajte sljedeći kod

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

OVDJE,

  • zaštićena $tablica = ”; definira zaštićenu varijablu pod nazivom table. Ovo će biti popunjeno odgovarajućom podređenom klasom kako bi se odredilo s kojom tablicom naše metode klase osnovnog modela trebaju komunicirati.
  • javna funkcija __construct() {…} definira metodu konstruktora i izvršava metodu konstruktora nadređene klase CI_Model.
  • get_all() {…} koristi biblioteku baze podataka i vrijednost varijable $table za pokretanje SELECT upita prema našoj bazi podataka.
  • get_by_id($id) {…} definira metodu za dohvaćanje jednog retka iz baze podataka i prihvaća parametar $id koji bi trebao biti tipa podataka INT.
  • get_where($where) {…} definira metodu get koja vam omogućuje da postavite klauzulu where.
  • insert($data) {…} definira metodu umetanja i prihvaća parametar polja $data koji sadrži vrijednosti koje treba zapisati u bazu podataka.
  • update($id, $data) {…} definira metodu ažuriranja i prihvaća parametar polja $data koji sadrži vrijednosti koje treba ažurirati u bazi podataka.
  • delete($id) {…} definira metodu brisanja koja prihvaća parametar $id koji bi trebao biti tipa podataka INT.

sada kada smo završili s roditeljskom klasom modela, kreirajmo naše Pals modele

Napravite novu datoteku u aplikaciji/modeli/Pals.php

Dodajte sljedeći kod

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

OVDJE,

  • klasa Pals extends BaseModel {…} proširuje nadređeni model BaseModel i automatski omogućuje pristup svim metodama definiranim u BaseModelu klasi podređenoj.
  • zaštićena $tablica = 'prijatelji'; definira naziv tablice povezan s našim roditeljskim modelom
  • __construct() {…} inicijalizira nadređeni konstruktor
  • javna funkcija get_by_id($id) {…} nadjačava get_by_id kako bi pružila prilagođenu implementaciju specifičnu za Pals model. Upit za get_by_id koristi spoj za dohvaćanje imena grada iz tablice gradova
  • javna funkcija get_all() {…} nadjačava metodu get_all za implementaciju upita za spajanje između prijatelja i tablice gradova

Napravite novu datoteku u aplikaciji/modeli/Gradovi.php

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

OVDJE,

zaštićena $tablica = 'gradovi'; definira tablicu baze podataka modela.

Kao što možete vidjeti iz gore navedenog koda, Inheritance nam štedi mnogo vremena kada radimo s modelima u CodeIgniteru. U sljedećem odjeljku naučit ćemo

Kontroleri upravitelja kontakata

Sada kada smo izradili modele, kreirajmo kontrolere za našu aplikaciju. Imat ćemo dva kontrolera, naime kontakte i gradove

Počnimo s gradovima

Napravite novu datoteku Cities.php u direktoriju application/controllers

Dodajte sljedeći kod

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

OVDJE,

Gornji kod implementira sve metode potrebne za stvaranje, ažuriranje, brisanje i čitanje redaka iz baze podataka.

Napravite drugu datoteku Contacts.php u aplikaciji/kontrolorima

Dodajte sljedeći kod

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

Prikazi upravitelja kontakata

Već smo pogledali obrasce i provjeru valjanosti u CodeIgniteru u prethodnim tutorijalima. Koristit ćemo kod koji smo razvili u prethodnim tutorijalima. Radi cjelovitosti, reproducirati ćemo kôd koji smo izradili u prethodnim vodičima.

Prikazi naše aplikacije bit će sljedeći

Prikazi upravitelja kontakata

Kôd za gornje prikaze možete preuzeti klikom na vezu u nastavku

CodeIgniter Contacts Manager Views Preuzimanje

rezime

U ovom vodiču naučit ćete kako izraditi modele u CodeIgniter. Iskoristili smo prednost nasljeđivanja u objektno orijentiranom programiranju za promicanje ponovne upotrebe koda stvaranjem osnovnog modela koji implementira četiri glavne operacije baze podataka umetanje, čitanje, ažuriranje i brisanje.

Demonstrirali smo koncepte pomoću praktične aplikacije, a nastavit ćemo to činiti u sljedećim uputama dodavanjem više funkcionalnosti aplikaciji.