CodeБаза даних Igniter: налаштування, оновлення та видалення даних
⚡ Розумний підсумок
CodeБаза даних Igniter створює моделі та контролери для менеджера контактів, що підтримується MySQLСпільна базова модель реалізує вставку, читання, оновлення та видалення, а дочірні моделі Pals та Cities успадковують її, тому контролери повторно використовують ті самі операції з базою даних у всій програмі.

CodeБаза даних запалювачів
У попередньому посібнику ми розглянули основи CodeАктивний запис Igniter та як вставляти, оновлювати, видаляти та зчитувати записи з бази даних. У цьому посібнику ми створимо моделі баз даних та використовуватимемо форми для створення та оновлення записів бази даних. Якщо ви зовсім новачок у роботі з базами даних у CodeЗапальник, вам рекомендується прочитати попередній навчальний посібник перший.
CodeКонфігурація бази даних Igniter
Ми почнемо зі створення бази даних навчального проекту. Ми створимо просту базу даних для керування контактною інформацією з двома таблицями з назвами pals та містами, в яких вони проживають. Зв'язок між pals та cities є однозначним, де id у таблиці cities є первинним ключем, а 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`) );
CodeМоделі бази даних запалювача
Тепер ми створимо моделі для нашої бази даних. Модель – це частина M MVC. Модель стосується доступу до даних, маніпулювання даними та бізнес-логіки.
In 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.
Ми створимо дві моделі, як описано на зображенні вище. Створіть новий клас 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); } }
тут:
- protected $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_model.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_model extends BaseModel {…} розширює батьківську модель BaseModel та автоматично робить усі її методи доступними для дочірнього класу.
- protected $table = 'pals'; визначає ім'я таблиці, пов'язаної з цією моделлю.
- __construct() {…} ініціалізує батьківський конструктор.
- Публічна функція get_by_id($id) {…} перевизначає get_by_id, щоб забезпечити власну реалізацію. Запит використовує об'єднання для отримання назви міста з таблиці міст.
- public function get_all() {…} перевизначає get_all для реалізації запиту на об'єднання між таблицями pals та cities.
Створіть новий файл у application/models/Cities_model.php:
<?php class Cities_model extends BaseModel { protected $table = 'cities'; public function __construct() { parent::__construct(); } }
тут:
- protected $table = 'міста'; визначає модель таблиці бази даних.
Як бачите, успадкування економить нам багато часу під час роботи з моделями в CodeЗапальник.
Менеджер контактів Контролери
Тепер, коли ми створили моделі, давайте створимо контролери для нашої програми. У нас буде два контролери: Cities та Contacts. Почнемо з Cities. Створіть новий файл 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 у application/controllers та додайте наступний код:
<?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 у попередніх навчальних посібниках, і ми використовуватимемо код, який ми там розробили. Для повноти картини, вигляд нашої програми виглядатиме так:
Ви можете завантажити код для переглядів, натиснувши на посилання нижче:
CodeЗавантаження переглядів менеджера контактів запалювача


