CodeIgniter-tietokanta: Määritys, Muokkaa, Päivitä, Poista tiedot

Codeigniter-tietokanta

Edellisessä opetusohjelmassa olemme käsitelleet CodeIgniter aktiivisen tietueen perusteita ja tietueiden lisäämistä, päivittämistä, poistamista ja lukemista tietokannasta. Tässä opetusohjelmassa luomme tietokantamalleja ja käytämme lomakkeita tietokantatietueiden luomiseen ja päivittämiseen. jos olet täysin uusi tietokantojen työskentely CodeIgniterissä, suosittelet lukemaan edellisen opetusohjelman

Codeigniter-tietokannan määritys

Aloitamme luomalla opetusprojektitietokannan. Luomme yksinkertaisen tietokannan yhteystietojen hallintaan. Luomme yksinkertaisen tietokannan, jossa on kaksi (2) taulukkoa, joissa nimeävät kaverit ja kaupungit, joissa he asuvat. Kavereiden ja kaupunkien välinen suhde on yksi yhteen, ja kaupunkien id on ensisijainen avain ja city_id vierasavain kaveritaulukoissa .

Luo tietokanta suorittamalla seuraavat komentosarjat:

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

Luodaan nyt kaupunkitaulukko

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

CodeIgniter-tietokantamallit

Luomme nyt malleja tietokantaamme. Malli on M-osa MVC. Malli käsittelee tietojen käyttöä, tietojen käsittelyä ja liiketoimintalogiikkaa.

CodeIgniterissä jokaisen mallin on määriteltävä menetelmät, joita se tukee. Sen sijaan, että toistaisimme samaa koodia jokaisessa mallissa, hyödynnämme olioohjelmoinnin periytymistä ja luomme emomalliluokan, joka määrittelee perusmenetelmät, joita haluamme malliemme tukevan.

Alla oleva taulukko näyttää menetelmät, jotka määrittelemme ja kuinka tietoja käytetään.

S / N Menetelmä Tuotetiedot
1 __rakentaa Määrittää konstruktorimenetelmän, joka kutsuu ylätason konstruktorimenetelmää
2 get_all Hakee kaikki kentät ja tietueet tietokannasta ilman ehtoja
3 get_by_id Hakee yhden rivin tietokannasta käyttämällä INT-tyypin ensisijaista avainta nimeltä id
4 get_where Hakee kaikki kentät tietokannasta perustuvien kriteerien perusteella
5 lisätä Lisää uuden tietueen tietokantaan
6 päivitys Päivittää olemassa olevan tietokantatietueen INT-tyypin ensisijaisen avaimen perusteella, jonka nimi on id
7 poistaa Poistaa olemassa olevan tietueen tietokannasta INT-tyypin ensisijaisen avaimen perusteella, jonka nimi on id

Seuraava kuva näyttää luokkakaavion ja kuinka Pals- ja Cities-alamallit liittyvät emomalliin BaseModel.

CodeIgniter-tietokantamallit

Luomme kaksi mallia yllä olevassa kuvassa kuvatulla tavalla

Luo uusi BaseModel-luokka tiedostossa application/models/BaseModel.php

Lisää seuraava koodi

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

TÄSSÄ,

  • suojattu $taulukko = ”; määrittää suojatun muuttujan nimeltä taulukko. Tämä täyttää vastaava aliluokka määrittääkseen, minkä taulukon kanssa perusmalliluokkamme menetelmien tulee olla vuorovaikutuksessa.
  • julkinen funktio __construct() {…} määrittää konstruktorimenetelmän ja suorittaa emoluokan CI_Model konstruktorimetodin.
  • get_all() {…} käyttää tietokantakirjastoa ja muuttujan $table arvoa SELECT-kyselyn suorittamiseen tietokantaamme vastaan.
  • get_by_id($id) {…} määrittää menetelmän yksittäisen rivin hakemiseksi tietokannasta ja hyväksyy parametrin $id, jonka tulee olla INT-tietotyyppiä.
  • get_where($where) {…} määrittelee get-menetelmän, jonka avulla voit asettaa where-lauseen.
  • insert($data) {…} määrittää insert-menetelmän ja hyväksyy taulukkoparametrin $data, joka sisältää tietokantaan kirjoitettavat arvot.
  • update($id, $data) {…} määrittää päivitystavan ja hyväksyy taulukkoparametrin $data, joka sisältää päivitettävät arvot tietokannassa.
  • delete($id) {…} määrittää poistomenetelmän, joka hyväksyy parametrin $id parametrin, jonka tulee olla tietotyyppiä INT.

Nyt kun emomalliluokka on valmis, luodaan Pals-mallimme

Luo uusi tiedosto osoitteessa application/models/Pals.php

Lisää seuraava koodi

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

TÄSSÄ,

  • luokka Pals laajentaa BaseModel-mallia {…} laajentaa emomallin BaseModel ja tekee automaattisesti kaikki BaseModelissa määritellyt menetelmät käytettäväksi aliluokkaan.
  • suojattu $pöytä = 'kaverit'; määrittää päämalliimme liittyvän taulukon nimen
  • __construct() {…} alustaa emokonstruktorin
  • julkinen funktio get_by_id($id) {…} ohittaa get_by_id-funktion tarjotakseen mukautetun toteutuksen Pals-mallille. Kysely get_by_id hakee kaupungin nimen kaupunkitaulukosta liitoksen avulla
  • julkinen funktio get_all() {…} ohittaa get_all-menetelmän toteuttaakseen liittymiskyselyn pals- ja kaupunkitaulukoiden välillä

Luo uusi tiedosto osoitteessa application/models/Cities.php

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

TÄSSÄ,

suojattu $pöytä = 'kaupungit'; määrittää mallitietokantataulukon.

Kuten yllä annetusta koodista näet, Inheritance säästää meiltä paljon aikaa työskennellessämme mallien kanssa CodeIgniterissä. Seuraavassa osiossa opimme

Yhteystiedot Manager-ohjaimet

Nyt kun olemme luoneet mallit, luodaan ohjaimet sovelluksellemme. Meillä on kaksi ohjainta, nimittäin Yhteystiedot ja Kaupungit

Aloitetaan kaupungeista

Luo uusi tiedosto Cities.php Application/controllers-hakemistoon

Lisää seuraava koodi

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

TÄSSÄ,

Yllä oleva koodi toteuttaa kaikki menetelmät, joita tarvitaan rivien luomiseen, päivittämiseen, poistamiseen ja lukemiseen tietokannasta.

Luo toinen tiedosto Contacts.php sovellukseen/ohjaimet

Lisää seuraava koodi

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

Yhteystietojen hallinnan näkymät

Tarkastelimme lomakkeita ja validointia CodeIgniterissä jo edellisissä opetusohjelmissa. Käytämme koodia, jonka kehitimme edellisissä opetusohjelmissa. Täydellisyyden vuoksi toistamme aiemmissa opetusohjelmissa luomamme koodin.

Hakemuksemme näkemykset ovat seuraavat

Yhteystietojen hallinnan näkymät

Voit ladata yllä olevien näkymien koodin napsauttamalla alla olevaa linkkiä

CodeIgniter Contacts Manager Näkymät Lataa

Yhteenveto

Tässä opetusohjelmassa opit luomaan malleja CodeIgniter. Hyödynsimme olioohjelmoinnin periytymistä edistääksemme koodin uudelleenkäytettävyyttä luomalla perusmallin, joka toteuttaa neljä tärkeintä tietokantatoimintoa: lisääminen, lukeminen, päivittäminen ja poistaminen.

Olemme demonstroineet konseptit käytännön sovelluksella, ja jatkamme niin seuraavissa tutoriaaleissa lisäämällä sovellukseen lisää toimintoja.

Tiivistä tämä viesti seuraavasti: