CodeIgniter adatbázis: konfigurálás, szerkesztés, frissítés, adatok törlése

Codeigniter adatbázis

Az előző oktatóanyagban bemutattuk a CodeIgniter aktív rekordjának alapjait, valamint a rekordok beillesztését, frissítését, törlését és beolvasását az adatbázisból. Ebben az oktatóanyagban adatbázismodelleket fogunk létrehozni, és űrlapokat használunk adatbázisrekordok létrehozásához és frissítéséhez. ha teljesen új a CodeIgniter adatbázisokkal való munkavégzésében, akkor azt tanácsolta, hogy olvassa el az előző oktatóanyagot

Codeigniter adatbázis-konfiguráció

Kezdjük az oktatói projekt adatbázis létrehozásával. Létrehozunk egy egyszerű adatbázist az elérhetőségek kezelésére. Létrehozunk egy egyszerű adatbázist két (2) táblával, amelyekben megnevezik a haverokat és a városokat, ahol élnek. A haverok és a városok közötti kapcsolat egy az egyhez, a városokban az id az elsődleges kulcs, a city_id pedig az idegen kulcs a baráti táblákban. .

Az adatbázis létrehozásához futtassa a következő szkripteket:

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

Most hozzuk létre a városok táblázatát

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

CodeIgniter adatbázis-modellek

Most modelleket készítünk adatbázisunkhoz. A Modell az M része MVC. A modell adathozzáféréssel, adatmanipulációval és üzleti logikával foglalkozik.

A CodeIgniterben minden modellnek meg kell határoznia azokat a metódusokat, amelyeket támogatni fog. Ahelyett, hogy minden modellben megismételnénk ugyanazt a kódot, kihasználjuk az öröklődés előnyeit az objektum-orientált programozásban, és létrehozunk egy szülőmodell osztályt, amely meghatározza azokat az alapvető metódusokat, amelyeket a modelljeink támogatni kívánunk.

Az alábbi táblázat bemutatja az általunk definiált módszereket és az adatok elérésének módját.

S / N Módszer Leírás
1 __konstruálni Meghatározza a konstruktor metódust, amely meghívja a szülő konstruktor metódust
2 get_all Feltétel nélkül lekéri az adatbázisból az összes mezőt és rekordot
3 get_by_id Egyetlen sort kér le az adatbázisból az INT típusú id nevű elsődleges kulcs használatával
4 get_where Az összes mezőt lekéri az adatbázisból a kritériumok alapján
5 helyezze Új rekordot szúr be az adatbázisba
6 frissítés Frissít egy meglévő adatbázisrekordot az INT típusú, id nevű elsődleges kulcs alapján
7 töröl Töröl egy meglévő rekordot az adatbázisból az INT típusú id nevű elsődleges kulcs alapján

A következő kép az osztálydiagramot mutatja, és azt, hogy a Pals és Cities gyermekmodellek hogyan kapcsolódnak a BaseModel szülőmodellhez.

CodeIgniter adatbázis-modellek

Két modellt készítünk a fenti képen leírtak szerint

Hozzon létre egy új BaseModel osztályt az application/models/BaseModel.php fájlban

Adja hozzá a következő kódot

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

ITT,

  • védett $tábla = ”; táblázat nevű védett változót határoz meg. Ezt a megfelelő gyermekosztály tölti fel, hogy meghatározza, hogy az alapmodell osztálymetódusaink melyik táblával működjenek együtt.
  • nyilvános függvény __construct() {…} határozza meg a konstruktor metódust, és végrehajtja a CI_Model szülőosztály konstruktor metódusát.
  • get_all() {…} az adatbázis-könyvtárat és a $table változó értékét használja a SELECT lekérdezés futtatásához az adatbázisunkban.
  • get_by_id($id) {…} meghatározza a módszert egyetlen sor lekéréséhez az adatbázisból, és elfogad egy $id paramétert, amelynek INT adattípusúnak kell lennie.
  • get_where($hol) {…} definiálja a get metódust, amely lehetővé teszi a where záradék beállítását.
  • Az insert($data) {…} meghatározza az insert metódust, és elfogadja az adatbázisba írandó értékeket tartalmazó $data tömbparamétert.
  • update($id, $data) {…} meghatározza a frissítési metódust, és elfogadja a $data tömbparamétert, amely tartalmazza a frissítendő értékeket az adatbázisban.
  • delete($id) {…} meghatározza a törlési metódust, amely elfogadja a $id paraméterét, amelynek INT adattípusúnak kell lennie.

Most, hogy elkészültünk a szülőmodell osztályával, hozzuk létre a Pals modelljeinket

Hozzon létre egy új fájlt az application/models/Pals.php fájlban

Adja hozzá a következő kódot

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

ITT,

  • class Pals kiterjeszti a BaseModel-t {…} kiterjeszti a BaseModel szülőmodellt, és automatikusan eléri a BaseModel-ben meghatározott összes metódust a gyermekosztályhoz.
  • védett $tábla = 'barátok'; a szülőmodellünkhöz társított táblanevet határozza meg
  • A __construct() {…} inicializálja a szülő konstruktort
  • public függvény get_by_id($id) {…} felülírja a get_by_id paramétert, hogy egyedi megvalósítást biztosítson a Pals modellre specifikusan. A get_by_id lekérdezése egy összekapcsolást használ a városnév lekéréséhez a városok táblázatából
  • nyilvános függvény get_all() {…} felülírja a get_all metódust a haverok és a városok tábla közötti összekapcsolási lekérdezés megvalósításához

Hozzon létre egy új fájlt az application/models/Cities.php fájlban

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

ITT,

védett $tábla = 'városok'; meghatározza a modell adatbázis táblát.

Amint a fent megadott kódból látható, az Inheritance sok időt takarít meg, amikor modellekkel dolgozunk a CodeIgniterben. A következő részben megtudjuk

Contacts Manager Controllers

Most, hogy elkészítettük a modelleket, hozzuk létre a vezérlőket az alkalmazásunkhoz. Két vezérlőnk lesz, nevezetesen a Kapcsolatok és a Városok

Kezdjük a városokkal

Hozzon létre egy új Cities.php fájlt az Application/controllers könyvtárban

Adja hozzá a következő kódot

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

ITT,

A fenti kód megvalósítja az összes olyan metódust, amely szükséges a sorok adatbázisból történő létrehozásához, frissítéséhez, törléséhez és olvasásához.

Hozzon létre egy másik Contacts.php fájlt az Application/controllerben

Adja hozzá a következő kódot

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

Névjegykezelő nézetek

Az előző oktatóanyagokban már megvizsgáltuk az űrlapokat és az érvényesítést a CodeIgniterben. Az előző oktatóanyagokban kifejlesztett kódot fogjuk használni. A teljesség kedvéért reprodukáljuk az előző oktatóanyagokban létrehozott kódot.

Pályázatunk álláspontja a következő lesz

Névjegykezelő nézetek

A fenti nézetek kódját az alábbi linkre kattintva töltheti le

CodeIgniter Névjegykezelő Nézetek Letöltés

Összegzésként

Ebből az oktatóanyagból megtudhatja, hogyan hozhat létre modelleket CodeIgniter. Az objektum-orientált programozásban az öröklődés előnyeit kihasználtuk a kód újrafelhasználhatóságának elősegítésére egy olyan alapmodell létrehozásával, amely megvalósítja a négy fő adatbázis-műveletet: beillesztést, olvasást, frissítést és törlést.

A koncepciókat egy gyakorlati alkalmazás segítségével mutattuk be, és ezt folytatjuk a következő oktatóanyagokban, és további funkciókkal bővítjük az alkalmazást.

Foglald össze ezt a bejegyzést a következőképpen: