CodeБаза данни на Igniter: Конфигурация, Редактиране, Актуализиране, Изтриване на данни

CodeБаза данни за запалване

В предишния урок разгледахме основите на CodeАктивен запис в Igniter и как да вмъквате, актуализирате, изтривате и четете записи от базата данни. В този урок ще създадем модели на бази данни и ще използваме формуляри за създаване и актуализиране на записи в базата данни. Ако сте напълно нови в работата с бази данни в CodeЗапалвач, тогава ми посъветвахте да прочета предишния урок

CodeКонфигурация на базата данни на запалителя

Ще започнем със създаването на базата данни на проекта за обучение. Ще създадем проста база данни за управление на данните за контакт. Ще създадем проста база данни с две (2) таблици с имена на приятели и градове, в които живеят. Връзката между приятели и градове е едно към едно с id в градовете като първичен ключ и city_id като външен ключ в таблиците на приятели .

Изпълнете следните скриптове, за да създадете базата данни:

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

Нека сега създадем таблицата на градовете

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

CodeМодели на база данни на запалителите

Сега ще създадем модели за нашата база данни. Моделът е М част на MVC. Моделът се занимава с достъп до данни, манипулиране на данни и бизнес логика.

In CodeВ Igniter, всеки модел трябва да дефинира методите, които ще поддържа. Вместо да повтаряме един и същ код във всеки модел, ще се възползваме от наследяването в обектно-ориентираното програмиране и ще създадем родителски клас на модела, който ще дефинира основните методи, които искаме нашите модели да поддържат.

Таблицата по-долу показва методите, които ще дефинираме и как ще се осъществява достъп до данните.

S / N Начин на доставка Descriptйон
1 __конструкция Дефинира метода на конструктора, който извиква метода на родителския конструктор
2 get_all Извлича всички полета и записи от базата данни без никакви условия
3 get_by_id Извлича единичен ред от базата данни, като използва първичния ключ от тип INT, наречен id
4 get_where Извлича всички полета от базата данни въз основа на критериите
5 вмъкнете Вмъква нов запис в базата данни
6 актуализация Актуализира съществуващ запис на база данни въз основа на първичния ключ от тип INT, наречен id
7 изтриване Изтрива съществуващ запис от базата данни въз основа на първичния ключ от тип INT, наречен id

Следното изображение показва диаграмата на класа и как дъщерните модели на Pals и Cities се отнасят към родителския модел BaseModel.

CodeМодели на база данни на запалителите

Ще създадем два модела, както е описано в изображението по-горе

Създайте нов клас BaseModel в application/models/BaseModel.php

Добавете следния код

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

ТУК,

  • защитена $таблица = ”; дефинира защитена променлива с име table. Това ще бъде попълнено от съответния дъщерен клас, за да се укаже с коя таблица трябва да взаимодействат нашите методи на клас на базов модел.
  • публичната функция __construct() {…} дефинира метода на конструктора и изпълнява метода на конструктора на родителския клас CI_Model.
  • get_all() {…} използва библиотеката на базата данни и стойността на променливата $table, за да изпълни заявката SELECT срещу нашата база данни.
  • get_by_id($id) {…} дефинира метода за извличане на един ред от базата данни и приема параметър $id, който трябва да бъде от тип данни INT.
  • get_where($where) {…} дефинира метода get, който ви позволява да зададете клауза where.
  • insert($data) {…} дефинира метода за вмъкване и приема параметъра на масива $data, който съдържа стойностите, които трябва да бъдат записани в базата данни.
  • update($id, $data) {…} дефинира метода за актуализиране и приема параметъра на масива $data, който съдържа стойностите за актуализиране в базата данни.
  • delete($id) {…} дефинира метода за изтриване, който приема параметър от $id, който трябва да бъде от тип данни INT.

сега, след като сме готови с класа родителски модел, нека създадем нашите модели Pals

Създайте нов файл в application/models/Pals.php

Добавете следния код

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

ТУК,

  • class Pals extends BaseModel {…} разширява родителския модел BaseModel и автоматично прави всички методи, дефинирани в BaseModel, достъпни до дъщерния клас.
  • защитена $ таблица = 'приятели'; дефинира името на таблицата, свързано с нашия родителски модел
  • __construct() {…} инициализира родителския конструктор
  • публичната функция get_by_id($id) {…} заменя get_by_id, за да предостави персонализирана реализация, специфична за модела на Pals. Заявката за get_by_id използва съединение, за да извлече името на града от таблицата на градовете
  • публична функция get_all() {…} заменя метода get_all за прилагане на заявка за присъединяване между приятели и таблица градове

Създайте нов файл в application/models/Cities.php

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

ТУК,

protected $table = 'градове'; дефинира моделната таблица на базата данни.

Както можете да видите от горния код, наследяването ни спестява много време при работа с модели в CodeЗапалител. В следващия раздел ще научим

Диспечер на контакти Контролери

Сега, след като създадохме моделите, нека създадем контролерите за нашето приложение. Ще имаме два контролера, а именно контакти и градове

Да започнем с градовете

Създайте нов файл Cities.php в директорията application/controllers

Добавете следния код

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

ТУК,

Горният код прилага всички необходими методи за създаване, актуализиране, изтриване и четене на редове от базата данни.

Създайте друг файл Contacts.php в приложение/контролери

Добавете следния код

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

Изгледи на мениджъра на контактите

Вече разгледахме формулярите и валидирането в CodeЗапалител в предишните уроци. Ще използваме кода, който разработихме в предишните уроци. За пълнота ще възпроизведем кода, който създадохме в предишните уроци.

Изгледите на нашето приложение ще бъдат както следва

Изгледи на мениджъра на контактите

Можете да изтеглите кода за горните изгледи, като щракнете върху връзката по-долу

CodeИзтегляне на мениджъра на контакти за запалване

Oбобщение

В този урок ще научите как да създавате модели в Codeподпалвач. Възползвахме се от наследяването в обектно-ориентираното програмиране, за да насърчим повторната употреба на кода, като създадехме базов модел, който прилага четирите основни операции на базата данни на вмъкване, четене, актуализиране и изтриване.

Ние демонстрирахме концепциите с помощта на практическо приложение и ще продължим да го правим в следващите уроци, като добавим повече функционалност към приложението.

Обобщете тази публикация с: