CodeБаза даних Igniter: налаштування, оновлення та видалення даних

⚡ Розумний підсумок

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

  • 🗄️ Схема: Дві пов'язані таблиці, pals та cities, моделюють зв'язок "один до одного" за допомогою зовнішнього ключа.
  • ️ Конфігурація: database.php встановлює з'єднання та завантажує бібліотеку бази даних.
  • 🧬 БазоваМодель: Батьківська модель визначає get_all, get_by_id, get_where, insert, update та delete.
  • 👨‍👩‍👧 успадкування: Pals та Cities розширюють BaseModel, тому вони повторно використовують її методи та перевизначають їх там, де це необхідно.
  • 🔗 Приєднується: Модель Pals об'єднує міста, щоб отримати назву міста разом із контактною інформацією.
  • 🎛️ Контролери: Контролери Cities та Contacts об'єднують моделі, форми та валідацію.
  • ♻️ Повторне використання: Успадкування видаляє повторюваний CRUD-код і забезпечує спрощення моделей.

CodeБаза даних запалювачів

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 з моделями Pals та Cities

Ми створимо дві моделі, як описано на зображенні вище. Створіть новий клас 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Завантаження переглядів менеджера контактів запалювача

Поширені запитання

Базова модель (BaseModel) містить спільні методи вставки, читання, оновлення та видалення один раз. Дочірні моделі успадковують їх і перевизначають лише те, що відрізняється, що усуває дублювання та зберігає кожну модель малою.

Кожен контакт зберігає city_id, а не назву міста. Перевизначення об'єднує таблицю cities, тому запит повертає читабельну назву міста поруч із кожним контактом в одному результаті.

Контролер завантажує модель, перевіряє надіслану форму та або зберігає дані та перенаправляє, або перезавантажує форму з помилками. Він з'єднує модель, представлення та бібліотеку валідації.

Так. З ваших визначень таблиць ШІ може створити базову модель з методами CRUD та однією дочірньою моделлю на таблицю, додаючи перевизначення об'єднань там, де зовнішньому ключу потрібна читабельна мітка. Revпереглянути згенеровані об'єднання.

Бібліотека бази даних надає необроблені методи запитів та Active Record. Модель обгортає ці виклики в змістовні, повторно використовувані операції для певної таблиці, зберігаючиping доступ до даних з контролера.

Підсумуйте цей пост за допомогою: