CodeБаза данных Igniter: настройка, обновление и удаление данных.
⚡ Умное резюме
CodeIgniter Database создает модели и контроллеры для менеджера контактов, поддерживаемого MySQLОбщая базовая модель (BaseModel) реализует операции вставки, чтения, обновления и удаления, а дочерние модели Pals и Cities наследуют её, поэтому контроллеры повторно используют одни и те же операции с базой данных во всём приложении.

CodeБаза данных Igniter
В предыдущем уроке мы рассмотрели основы CodeВ этом руководстве мы рассмотрим Igniter Active Record и способы вставки, обновления, удаления и чтения записей из базы данных. Мы создадим модели базы данных и будем использовать формы для создания и обновления записей в базе данных. Если вы совершенно новичок в работе с базами данных, то это руководство вам пригодится. CodeIgniter, вам рекомендуется ознакомиться с... предыдущий учебник первый.
CodeКонфигурация базы данных Igniter
Начнём с создания базы данных для учебного проекта. Мы создадим простую базу данных для управления контактными данными, состоящую из двух таблиц: pals и citys, в которых живут их друзья. Связь между 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Модели баз данных Igniter
Теперь мы создадим модели для нашей базы данных. Модель — это часть M. MVC. Модель касается доступа к данным, манипулирования ими и бизнес-логики.
In CodeВ Igniter каждая модель должна определять методы, которые она будет поддерживать. Вместо того чтобы повторять один и тот же код в каждой модели, мы воспользуемся наследованием в объектно-ориентированном программировании и создадим родительский класс модели, который определит основные методы, которые мы хотим, чтобы наши модели поддерживали.
В таблице ниже показаны методы, которые мы определим, и способы доступа к данным.
| S / N | Способ доставки | Описание |
|---|---|---|
| 1 | __конструкт | Определяет метод-конструктор, который вызывает метод-конструктор родительского класса. |
| 2 | получить все | Извлекает все поля и записи из базы данных без каких-либо условий. |
| 3 | get_by_id | Извлекает одну строку из базы данных, используя первичный ключ типа INT с именем id. |
| 4 | получить_куда | Извлекает все поля из базы данных на основе заданных критериев. |
| 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. Она заполняется соответствующим дочерним классом, чтобы указать, с какой таблицей должны взаимодействовать методы базовой модели.
- Функция `public function __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(); } }
Вот:
- Класс Pals_model extends BaseModel {…} наследует родительскую модель BaseModel и автоматически делает все ее методы доступными для дочернего класса.
- protected $table = 'pals'; определяет имя таблицы, связанной с этой моделью.
- Метод __construct() {…} инициализирует конструктор родительского класса.
- Функция `public function get_by_id($id) {…}` переопределяет `get_by_id`, предоставляя собственную реализацию. Запрос использует соединение (JOIN) для получения названия города из таблицы `citys`.
- 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(); } }
Вот:
- защищенная таблица $ = 'города'; определяет таблицу базы данных модели.
Как видите, наследование значительно экономит нам время при работе с моделями. 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 в папке 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')); } }
Просмотры менеджера контактов
Мы уже рассматривали формы и проверку данных в CodeМы использовали Igniter из предыдущих уроков, и будем применять разработанный там код. Для полноты картины, интерфейс нашего приложения будет выглядеть следующим образом:
Вы можете скачать код для представлений, перейдя по ссылке ниже:
CodeМенеджер контактов Igniter Просмотры Скачать


