Databáze CodeIgniter: Konfigurace, úprava, aktualizace, smazání dat

Databáze Codeigniter

V předchozím tutoriálu jsme probrali základy aktivního záznamu CodeIgniter a jak vkládat, aktualizovat, mazat a číst záznamy z databáze. V tomto tutoriálu vytvoříme databázové modely a použijeme formuláře k vytvoření a aktualizaci databázových záznamů. pokud jste v práci s databázemi v CodeIgniter úplným nováčkem, pak vám doporučujeme přečíst si předchozí tutoriál

Konfigurace databáze Codeigniter

Začneme vytvořením databáze výukového projektu. Vytvoříme jednoduchou databázi pro správu kontaktních údajů. Vytvoříme jednoduchou databázi se dvěma (2) tabulkami jmen kamarádů a měst, ve kterých žijí. Vztah mezi kamarády a městy je jedna ku jedné s id ve městech jako primárním klíčem a city_id jako cizím klíčem v tabulkách kamarádů .

Pro vytvoření databáze spusťte následující skripty:

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

Nyní vytvoříme tabulku měst

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

Databázové modely CodeIgniter

Nyní vytvoříme modely pro naši databázi. Model je součástí M MVC. Model se zabývá přístupem k datům, manipulací s daty a obchodní logikou.

V CodeIgniter musí každý model definovat metody, které bude podporovat. Místo opakování stejného kódu v každém modelu využijeme výhody dědičnosti v objektově orientovaném programování a vytvoříme nadřazenou třídu modelu, která bude definovat základní metody, které chceme, aby naše modely podporovaly.

Níže uvedená tabulka ukazuje metody, které budeme definovat, a jak se bude k datům přistupovat.

S / N Metoda Description
1 __postavit Definuje metodu konstruktoru, která volá metodu nadřazeného konstruktoru
2 dostat všechny Načte všechna pole a záznamy z databáze bez jakýchkoli podmínek
3 get_by_id Načte jeden řádek z databáze pomocí primárního klíče typu INT s názvem id
4 get_where Načte všechna pole z databáze na základě kritérií založených v
5 INSERT Vloží nový záznam do databáze
6 aktualizovat Aktualizuje existující záznam databáze na základě primárního klíče typu INT s názvem id
7 vymazat Odstraní existující záznam z databáze na základě primárního klíče typu INT s názvem id

Následující obrázek ukazuje diagram tříd a vztah podřízených modelů Pals a Cities k nadřazenému modelu BaseModel.

Databázové modely CodeIgniter

Vytvoříme dva modely, jak je popsáno na obrázku výše

Vytvořte novou třídu BaseModel v application/models/BaseModel.php

Přidejte následující kód

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

TADY,

  • chráněná $tabulka = ”; definuje chráněnou proměnnou s názvem tabulka. Toto bude vyplněno příslušnou podřízenou třídou, aby bylo možné určit, se kterou tabulkou by měly naše metody třídy základního modelu komunikovat.
  • public function __construct() {…} definuje metodu konstruktoru a provádí metodu konstruktoru nadřazené třídy CI_Model.
  • get_all() {…} používá databázovou knihovnu a hodnotu proměnné $table ke spuštění SELECT dotazu proti naší databázi.
  • get_by_id($id) {…} definuje metodu pro načtení jednoho řádku z databáze a přijímá parametr $id, který by měl být datového typu INT.
  • get_where($where) {…} definuje metodu get, která vám umožňuje nastavit klauzuli where.
  • insert($data) {…} definuje metodu insert a přijímá parametr pole $data, který obsahuje hodnoty, které mají být zapsány do databáze.
  • update($id, $data) {…} definuje metodu aktualizace a přijímá parametr pole $data, který obsahuje hodnoty, které mají být aktualizovány v databázi.
  • delete($id) {…} definuje metodu mazání, která přijímá parametr $id, který by měl být datového typu INT.

nyní, když jsme skončili s rodičovskou třídou modelu, pojďme vytvořit naše modely Pals

Vytvořte nový soubor v application/models/Pals.php

Přidejte následující kód

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

TADY,

  • class Pals rozšiřuje BaseModel {…} rozšiřuje rodičovský model BaseModel a automaticky zpřístupňuje všechny metody definované v BaseModel podřízené třídě.
  • protected $table = 'kamarádi'; definuje název tabulky přidružený k našemu nadřazenému modelu
  • __construct() {…} inicializuje nadřazený konstruktor
  • veřejná funkce get_by_id($id) {…} přepíše get_by_id, aby poskytla vlastní implementaci specifickou pro model Pals. Dotaz na get_by_id používá spojení k načtení názvu města z tabulky měst
  • veřejná funkce get_all() {…} přepíše metodu get_all pro implementaci spojovacího dotazu mezi tabulkou kamarádů a měst

Vytvořte nový soubor v application/models/Cities.php

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

TADY,

protected $table = 'města'; definuje modelovou databázovou tabulku.

Jak je vidět z výše uvedeného kódu, dědičnost nám ušetří spoustu času při práci s modely v CodeIgniter. V další části se to naučíme

Ovladače Contacts Manager

Nyní, když jsme vytvořili modely, pojďme vytvořit ovladače pro naši aplikaci. Budeme mít dva ovladače, jmenovitě Kontakty a Města

Začněme městy

Vytvořte nový soubor Cities.php v adresáři application/controllers

Přidejte následující kód

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

TADY,

Výše uvedený kód implementuje všechny metody potřebné k vytvoření, aktualizaci, odstranění a čtení řádků z databáze.

Vytvořte další soubor Contacts.php v aplikaci/ovladače

Přidejte následující kód

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

Zobrazení Správce kontaktů

Na formuláře a ověřování v CodeIgniter jsme se již podívali v předchozích tutoriálech. Použijeme kód, který jsme vyvinuli v předchozích tutoriálech. Pro úplnost zopakujeme kód, který jsme vytvořili v předchozích tutoriálech.

Pohledy na naši aplikaci budou následující

Zobrazení Správce kontaktů

Kód pro výše uvedená zobrazení si můžete stáhnout kliknutím na odkaz níže

CodeIgniter Contacts Manager Views Stáhnout

Shrnutí

V tomto tutoriálu se naučíte vytvářet modely v CodeIgniter. Využili jsme výhody dědičnosti v objektově orientovaném programování k podpoře opětovné použitelnosti kódu vytvořením základního modelu, který implementuje čtyři hlavní databázové operace vkládání, čtení, aktualizace a mazání.

Předvedli jsme koncepty pomocí praktické aplikace a budeme v tom pokračovat v dalších tutoriálech přidáním dalších funkcí do aplikace.