CodeIgniteri andmebaas: konfigureerimine, redigeerimine, värskendamine, andmete kustutamine

Codeigniteri andmebaas

Eelmises õpetuses oleme käsitlenud CodeIgniteri aktiivse kirje põhitõdesid ning kirjete sisestamist, värskendamist, kustutamist ja lugemist andmebaasist. Selles õpetuses loome andmebaasimudelid ja kasutame vorme andmebaasikirjete loomiseks ja värskendamiseks. kui olete CodeIgniteri andmebaasidega töötamises täiesti uus, soovitasite lugeda eelmist õpetust

Codeigniteri andmebaasi konfiguratsioon

Alustame õppeprojektide andmebaasi loomisega. Loome lihtsa andmebaasi kontaktandmete haldamiseks. Loome kahe (2) tabeliga lihtsa andmebaasi sõprade ja linnade nimedega, kus nad elavad. Sõprade ja linnade suhe on üks-ühele, kus linnades on primaarvõti id ja pals tabelites võõrvõti city_id .

Andmebaasi loomiseks käivitage järgmised skriptid:

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

Loome nüüd linnade tabeli

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

CodeIgniteri andmebaasimudelid

Nüüd loome oma andmebaasi mudelid. Mudel on M-osa MVC. Mudel käsitleb andmetele juurdepääsu, andmetega manipuleerimist ja äriloogikat.

CodeIgniteris peab iga mudel määratlema meetodid, mida see toetab. Selle asemel, et korrata igas mudelis sama koodi, kasutame objektorienteeritud programmeerimisel pärilikkust ja loome põhimudeli klassi, mis määratleb põhimeetodid, mida soovime, et meie mudelid toetaksid.

Allolev tabel näitab meetodeid, mille me määratleme ja kuidas andmetele juurde pääseb.

S / N Meetod Kirjeldus
1 __ ehitama Määrab konstruktori meetodi, mis kutsub välja emakonstruktori meetodi
2 hanki_kõik Otsib andmebaasist kõik väljad ja kirjed ilma tingimusteta
3 get_by_id Toob andmebaasist ühe rea, kasutades INT tüüpi primaarvõtit nimega id
4 get_where Otsib andmebaasist kõik väljad kriteeriumide alusel
5 sisestada Lisab andmebaasi uue kirje
6 ajakohastama Värskendab olemasolevat andmebaasikirjet INT-tüüpi primaarvõtme nimega id alusel
7 kustutama Kustutab olemasoleva kirje andmebaasist INT tüüpi primaarvõtme nimega id alusel

Järgmine pilt näitab klassidiagrammi ja seda, kuidas Pals ja Cities alammudelid on seotud emamudeliga BaseModel.

CodeIgniteri andmebaasimudelid

Loome kaks mudelit, nagu on kirjeldatud ülaltoodud pildil

Looge rakenduses/models/BaseModel.php uus klass BaseModel

Lisage järgmine kood

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

SIIN,

  • kaitstud $tabel = ”; defineerib kaitstud muutuja nimega tabeli. Selle täidab vastav alamklass, et määrata, millise tabeliga meie baasmudeli klassimeetodid peaksid suhtlema.
  • avalik funktsioon __construct() {…} defineerib konstruktorimeetodi ja käivitab vanemklassi CI_Model konstruktorimeetodi.
  • get_all() {…} kasutab andmebaasi teeki ja muutuja $table väärtust, et käivitada SELECT päring meie andmebaasis.
  • get_by_id($id) {…} määrab meetodi ühe rea toomiseks andmebaasist ja aktsepteerib parameetri $id, mis peaks olema INT andmetüübiga.
  • get_where($where) {…} defineerib hankimismeetodi, mis võimaldab määrata kuhu-klausli.
  • insert($data) {…} määrab sisestamismeetodi ja aktsepteerib massiivi parameetri $data, mis sisaldab andmebaasi kirjutatavaid väärtusi.
  • update($id, $data) {…} määrab uuendusmeetodi ja aktsepteerib massiivi parameetri $data, mis sisaldab andmebaasis värskendatavaid väärtusi.
  • delete($id) {…} määrab kustutamismeetodi, mis aktsepteerib $id parameetrit, mis peaks olema andmetüübiga INT.

Nüüd, kui oleme vanemate mudeliklassiga valmis saanud, loome oma Palsi mudelid

Looge rakenduses/models/Pals.php uus fail

Lisage järgmine kood

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

SIIN,

  • klass Pals laiendab BaseModeli {…} laiendab põhimudelit BaseModel ja muudab kõik BaseModelis määratletud meetodid automaatselt alamklassile juurdepääsuks.
  • kaitstud $table = 'sõbrad'; määrab meie emamudeliga seotud tabeli nime
  • __construct() {…} lähtestab emakonstruktori
  • avalik funktsioon get_by_id($id) {…} alistab funktsiooni get_by_id, et pakkuda Palsi mudelile spetsiifilist kohandatud teostust. Päring get_by_id kasutab linna nime toomiseks linnade tabelist liitumist
  • avalik funktsioon get_all() {…} alistab meetodi get_all, et realiseerida liitumispäring sõprade ja linnade tabeli vahel

Looge rakenduses/models/Cities.php uus fail

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

SIIN,

kaitstud $tabel = 'linnad'; määratleb mudeli andmebaasi tabeli.

Nagu ülaltoodud koodist näha, säästab pärand CodeIgniteris mudelitega töötades palju aega. Järgmises osas õpime

Kontaktide halduri kontrollerid

Nüüd, kui oleme mudelid loonud, loome oma rakenduse jaoks kontrollerid. Meil on kaks kontrollerit, nimelt kontaktid ja linnad

Alustame linnadest

Looge rakenduste/kontrollerite kataloogis uus fail Cities.php

Lisage järgmine kood

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

SIIN,

Ülaltoodud kood rakendab kõiki meetodeid, mida on vaja andmebaasist ridade loomiseks, värskendamiseks, kustutamiseks ja lugemiseks.

Looge rakenduses/kontrollerites teine ​​fail Contacts.php

Lisage järgmine kood

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

Kontaktide halduri vaated

CodeIgniteri vorme ja valideerimist vaatlesime juba eelmistes õpetustes. Kasutame koodi, mille oleme välja töötanud eelmistes õpetustes. Täielikkuse huvides reprodutseerime eelmistes õpetustes loodud koodi.

Meie taotluse seisukohad on järgmised

Kontaktide halduri vaated

Ülaltoodud vaadete koodi saate alla laadida, klõpsates alloleval lingil

CodeIgniteri kontaktide halduri vaated allalaadimine

kokkuvõte

Sellest õpetusest saate teada, kuidas luua mudeleid CodeIgniter. Kasutasime ära objektorienteeritud programmeerimise pärandi, et edendada koodi korduvkasutatavust, luues baasmudeli, mis rakendab nelja peamist andmebaasi toimingut: sisestamine, lugemine, värskendamine ja kustutamine.

Oleme kontseptsioone praktilise rakenduse abil demonstreerinud ja jätkame seda järgmistes õpetustes, lisades rakendusele rohkem funktsioone.