База даних CodeIgniter: конфігурація, редагування, оновлення, видалення даних

База даних Codeigniter

У попередньому посібнику ми розглянули основи активного запису CodeIgniter і те, як вставляти, оновлювати, видаляти та читати записи з бази даних. У цьому підручнику ми будемо створювати моделі бази даних і використовувати форми для створення та оновлення записів бази даних. якщо ви зовсім новачок у роботі з базами даних у CodeIgniter, то вам порадили прочитати попередній посібник

Конфігурація бази даних Codeigniter

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

Виконайте такі сценарії, щоб створити базу даних:

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

Моделі баз даних CodeIgniter

Тепер ми створимо моделі для нашої бази даних. Модель є частиною M MVC. Модель стосується доступу до даних, маніпулювання даними та бізнес-логіки.

У CodeIgniter кожна модель має визначити методи, які вона підтримуватиме. Замість того, щоб повторювати той самий код у кожній моделі, ми скористаємося перевагами успадкування в об’єктно-орієнтованому програмуванні та створимо клас батьківської моделі, який визначатиме основні методи, які ми хочемо підтримувати в наших моделях.

У таблиці нижче показано методи, які ми визначимо, і спосіб доступу до даних.

S / N Метод Опис
1 __конструювати Визначає метод конструктора, який викликає батьківський метод конструктора
2 get_all Отримує всі поля та записи з бази даних без будь-яких умов
3 get_by_id Отримує один рядок із бази даних за допомогою первинного ключа типу INT під назвою id
4 get_where Отримує всі поля з бази даних на основі критеріїв
5 вставити Вставляє новий запис у базу даних
6 оновлення Оновлює наявний запис бази даних на основі первинного ключа типу INT під назвою id
7 видаляти Видаляє наявний запис із бази даних на основі первинного ключа типу INT під назвою id

На наступному зображенні показано діаграму класів і те, як дочірні моделі Pals і Cities пов’язані з батьківською моделлю BaseModel.

Моделі баз даних CodeIgniter

Ми створимо дві моделі, як описано на зображенні вище

Створіть новий клас 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.
  • захищений $table = 'друзі'; визначає назву таблиці, пов’язану з нашою батьківською моделлю
  • __construct() {…} ініціалізує батьківський конструктор
  • публічна функція get_by_id($id) {…} замінює get_by_id, щоб забезпечити спеціальну реалізацію, специфічну для моделі Pals. Запит get_by_id використовує об’єднання для отримання назви міста з таблиці міст
  • публічна функція get_all() {…} замінює метод get_all для реалізації запиту на об’єднання між друзями та таблицею citys

Створіть новий файл у application/models/Cities.php

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

ТУТ,

protected $table = 'міста'; визначає модель таблиці бази даних.

Як ви можете бачити з наведеного вище коду, Inheritance економить нам багато часу під час роботи з моделями в CodeIgniter. У наступному розділі ми дізнаємося

Менеджер контактів Контролери

Тепер, коли ми створили моделі, давайте створимо контролери для нашої програми. У нас буде два контролери, а саме контакти та міста

Почнемо з міст

Створіть новий файл 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'));
    }
}

Перегляди менеджера контактів

Ми вже розглядали форми та перевірку в CodeIgniter у попередніх уроках. Ми будемо використовувати код, який ми розробили в попередніх уроках. Для повноти картини ми відтворимо код, створений у попередніх уроках.

Вигляди нашої програми будуть такими

Перегляди менеджера контактів

Ви можете завантажити код для представлень вище, натиснувши посилання нижче

CodeIgniter Contacts Manager Views Завантажити

Підсумки

У цьому підручнику ви дізнаєтеся, як створювати моделі в CodeIgniter. Ми скористалися перевагами успадкування в об’єктно-орієнтованому програмуванні, щоб сприяти повторному використанню коду, створивши базову модель, яка реалізує чотири основні операції бази даних: вставлення, читання, оновлення та видалення.

Ми продемонстрували концепції за допомогою практичного застосування, і ми продовжимо це робити в наступних посібниках, додавши більше функціональних можливостей до програми.