База данных CodeIgniter: настройка, редактирование, обновление, удаление данных

База данных Кодайнитера

В предыдущем уроке мы рассмотрели основы активной записи 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

Теперь мы создадим модели для нашей базы данных. Модель — это М-часть MVC. Модель касается доступа к данным, манипулирования ими и бизнес-логики.

В CodeIgniter каждая модель должна определить методы, которые она будет поддерживать. Вместо повторения одного и того же кода в каждой модели мы воспользуемся преимуществами наследования в объектно-ориентированном программировании и создадим родительский класс модели, который будет определять основные методы, которые мы хотим, чтобы наши модели поддерживали.

В таблице ниже показаны методы, которые мы определим, и способы доступа к данным.

S / N Способ доставки Описание
1 __конструкт Определяет метод конструктора, который вызывает метод родительского конструктора
2 получить все Извлекает все поля и записи из базы данных без каких-либо условий.
3 get_by_id Извлекает одну строку из базы данных, используя первичный ключ типа INT с именем id.
4 получить_куда Извлекает все поля из базы данных на основе критериев.
5 вставить Вставляет новую запись в базу данных
6 обновление Обновляет существующую запись базы данных на основе первичного ключа типа INT с именем id.
7 удалять Удаляет существующую запись из базы данных на основе первичного ключа типа INT с именем id.

На следующем изображении показана диаграмма классов и то, как дочерние модели Pals и Cities связаны с родительской моделью BaseModel.

Модели баз данных CodeIgniter

Мы создадим две модели, как описано на изображении выше.

Создайте новый класс 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 расширяет BaseModel {…} расширяет родительскую модель BaseModel и автоматически делает все методы, определенные в BaseModel, доступными для дочернего класса.
  • защищенная $table = 'приятели'; определяет имя таблицы, связанной с нашей родительской моделью
  • __construct() {…} инициализирует родительский конструктор
  • общедоступная функция get_by_id($id) {…} переопределяет get_by_id, обеспечивая пользовательскую реализацию, специфичную для модели Pals. Запрос get_by_id использует соединение для получения названия города из таблицы городов.
  • публичная функция get_all() {…} переопределяет метод get_all для реализации запроса на соединение между таблицей друзей и городов

Создайте новый файл в application/models/Cities.php.

<?php
class Cities extends BaseModel {
    protected $table = 'cities';
    
    public function __construct() {
        parent::__construct();
    }
}

ВОТ,

защищенная таблица $ = 'города'; определяет таблицу базы данных модели.

Как видно из приведенного выше кода, Inheritance экономит нам много времени при работе с моделями в CodeIgniter. В следующем разделе мы узнаем

Менеджер контактов Контроллеры

Теперь, когда мы создали модели, давайте создадим контроллеры для нашего приложения. У нас будет два контроллера: Контакты и Города.

Начнем с городов

Создайте новый файл Cities.php в каталоге приложения/контроллеров.

Добавьте следующий код

<?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. Мы воспользовались преимуществами наследования в объектно-ориентированном программировании для обеспечения возможности повторного использования кода, создав базовую модель, которая реализует четыре основные операции с базой данных: вставку, чтение, обновление и удаление.

Мы продемонстрировали концепции на практическом приложении и продолжим делать это в следующих руководствах, добавляя в приложение больше функций.