CodeIgniter Работа с базой данных
В предыдущем уроке мы рассмотрели основы активной записи CodeIgniter и способы вставки, обновления, удаления и чтения записей из базы данных. В этом руководстве мы создадим модели базы данных и будем использовать формы для создания и обновления записей базы данных. если вы совсем новичок в работе с базами данных в CodeIgniter, то вы посоветовали прочитать предыдущее руководство
Конфигурация базы данных
Мы начнем с создания учебной базы данных проекта. Мы создадим простую базу данных для управления контактными данными. Мы создадим простую базу данных с двумя (2) таблицами имен приятелей и городов, в которых они живут. Отношения между приятелями и городами взаимно однозначны с id в городах в качестве первичного ключа и city_id в качестве внешнего ключа в таблицах приятелей. ,
Запустите следующие сценарии для создания базы данных:
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 | __construct | Определяет метод конструктора, который вызывает метод родительского конструктора |
| 2 | получить все | Извлекает все поля и записи из базы данных без каких-либо условий |
| 3 | get_by_id | Извлекает одну строку из базы данных, используя первичный ключ типа INT с именем id |
| 4 | get_where | Извлекает все поля из базы данных на основе критериев |
| 5 | вставка | Вставляет новую запись в базу данных |
| 6 | Обновить | Обновляет существующую запись базы данных на основе первичного ключа типа INT с именем id |
| 7 | удалять | Удаляет существующую запись из базы данных на основе первичного ключа типа INT с именем id |
На следующем рисунке показана диаграмма классов и то, как дочерние модели Pals и Cities связаны с родительской моделью BaseModel.
Мы создадим две модели, как описано на изображении выше
Создайте новый класс BaseModel в приложении / 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 = »; определяет защищенную переменную с именем 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
Создайте новый файл в приложении / 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();
}
}
ВОТ,
- Класс Pals extends BaseModel {…} расширяет родительскую модель BaseModel и автоматически делает все методы, определенные в BaseModel, доступными для дочернего класса.
- защищенный $ table = ‘pals’; определяет имя таблицы, связанной с нашей родительской моделью
- __construct () {…} инициализирует родительский конструктор
- публичная функция get_by_id ($ id) {…} переопределяет get_by_id для предоставления пользовательской реализации, специфичной для модели Pals. Запрос get_by_id использует объединение для получения названия города из таблицы городов.
- публичная функция get_all () {…} переопределяет метод get_all для реализации запроса соединения между таблицами друзей и городов
Создайте новый файл в приложении / models / Cities.php
<?php
class Cities extends BaseModel {
protected $table = 'cities';
public function __construct() {
parent::__construct();
}
}
ВОТ,
- защищенная таблица $ = ‘города’; определяет таблицу базы данных модели.
Как видно из приведенного выше кода, наследование экономит нам много времени при работе с моделями в 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 Менеджер контактов Просмотров Скачать
Резюме
В этом руководстве вы узнаете, как создавать модели в CodeIgniter. Мы воспользовались наследованием в объектно-ориентированном программировании, чтобы способствовать повторному использованию кода, создав базовую модель, которая реализует четыре основные операции базы данных: вставка, чтение, обновление и удаление.
Мы продемонстрировали концепции, используя практическое приложение, и мы продолжим делать это в следующих уроках, добавив больше функциональности в приложение.

