База даних 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.
Ми створимо дві моделі, як описано на зображенні вище
Створіть новий клас 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. Ми скористалися перевагами успадкування в об’єктно-орієнтованому програмуванні, щоб сприяти повторному використанню коду, створивши базову модель, яка реалізує чотири основні операції бази даних: вставлення, читання, оновлення та видалення.
Ми продемонстрували концепції за допомогою практичного застосування, і ми продовжимо це робити в наступних посібниках, додавши більше функціональних можливостей до програми.