CodeCơ sở dữ liệu Igniter: Cấu hình, Chỉnh sửa, Cập nhật, Xóa dữ liệu

CodeCơ sở dữ liệu bộ đánh lửa

Trong bài hướng dẫn trước, chúng ta đã tìm hiểu những kiến ​​thức cơ bản về CodeHướng dẫn sử dụng Igniter Active Record và cách chèn, cập nhật, xóa và đọc bản ghi từ cơ sở dữ liệu. Trong hướng dẫn này, chúng ta sẽ tạo các mô hình cơ sở dữ liệu và sử dụng các biểu mẫu để tạo và cập nhật bản ghi cơ sở dữ liệu. Nếu bạn hoàn toàn mới làm quen với việc làm việc với cơ sở dữ liệu trong Igniter Active Record, thì hướng dẫn này rất hữu ích. CodeIgniter, vậy là bạn đã khuyên nên đọc lại hướng dẫn trước đó.

CodeCấu hình cơ sở dữ liệu igniter

Chúng ta sẽ bắt đầu bằng cách tạo cơ sở dữ liệu dự án hướng dẫn. Chúng ta sẽ tạo một cơ sở dữ liệu đơn giản để quản lý thông tin liên lạc. Chúng ta sẽ tạo một cơ sở dữ liệu đơn giản với hai (2) bảng tên pals và thành phố mà họ sống. Mối quan hệ giữa pals và thành phố là một-một với id trong cities là khóa chính và city_id là khóa ngoại trong các bảng pals.

Chạy các tập lệnh sau để tạo cơ sở dữ liệu:

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`)
);

Bây giờ hãy tạo bảng thành phố

CREATE TABLE `cities` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(245) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ;

CodeMô hình cơ sở dữ liệu Igniter

Bây giờ chúng ta sẽ tạo các mô hình cho cơ sở dữ liệu của mình. Mô hình là phần M của VMC. Mô hình này xử lý việc truy cập dữ liệu, thao tác dữ liệu và logic nghiệp vụ.

In CodeTrong Igniter, mỗi model phải định nghĩa các phương thức mà nó sẽ hỗ trợ. Thay vì lặp lại cùng một đoạn mã trong mỗi model, chúng ta sẽ tận dụng tính kế thừa trong lập trình hướng đối tượng và tạo ra một lớp model cha để định nghĩa các phương thức cơ bản mà chúng ta muốn các model của mình hỗ trợ.

Bảng bên dưới hiển thị các phương thức mà chúng tôi sẽ xác định và cách truy cập dữ liệu.

S / N Phương pháp Mô tả Chi tiết
1 __xây dựng Xác định phương thức khởi tạo gọi phương thức khởi tạo gốc
2 lấy hết Truy xuất tất cả các trường và bản ghi từ cơ sở dữ liệu mà không cần bất kỳ điều kiện nào
3 get_by_id Truy xuất một hàng từ cơ sở dữ liệu bằng khóa chính của loại INT có tên id
4 đi đâu Truy xuất tất cả các trường từ cơ sở dữ liệu dựa trên tiêu chí dựa trên
5 chèn Chèn một bản ghi mới vào cơ sở dữ liệu
6 cập nhật Cập nhật bản ghi cơ sở dữ liệu hiện có dựa trên khóa chính của loại INT có tên id
7 xóa Xóa bản ghi hiện có khỏi cơ sở dữ liệu dựa trên khóa chính của loại INT có tên id

Hình ảnh sau đây hiển thị sơ đồ lớp và cách các mô hình con Pals và Cities liên quan đến mô hình cha BaseModel.

CodeMô hình cơ sở dữ liệu Igniter

Chúng ta sẽ tạo hai mô hình như mô tả ở hình trên

Tạo một lớp BaseModel mới trong application/models/BaseModel.php

Thêm mã sau đây

<?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);
    }
}

ĐÂY,

  • bảng $ được bảo vệ = ”; định nghĩa một biến được bảo vệ có tên là bảng. Điều này sẽ được lớp con tương ứng điền vào để chỉ định bảng nào mà các phương thức lớp mô hình cơ sở của chúng ta sẽ tương tác.
  • public function __construct() {…} định nghĩa phương thức khởi tạo và thực thi phương thức khởi tạo của lớp cha CI_Model.
  • get_all() {…} sử dụng thư viện cơ sở dữ liệu và giá trị của biến $table để chạy truy vấn SELECT đối với cơ sở dữ liệu của chúng ta.
  • get_by_id($id) {…} xác định phương thức truy xuất một hàng từ cơ sở dữ liệu và chấp nhận tham số $id phải thuộc loại dữ liệu INT.
  • get_where($where) {…} xác định phương thức get cho phép bạn đặt mệnh đề Where.
  • Insert($data) {…} xác định phương thức chèn và chấp nhận tham số mảng $data chứa các giá trị được ghi vào cơ sở dữ liệu.
  • update($id, $data) {…} xác định phương thức cập nhật và chấp nhận tham số mảng $data chứa các giá trị sẽ được cập nhật trong cơ sở dữ liệu.
  • delete($id) {…} xác định phương thức xóa chấp nhận tham số $id phải thuộc kiểu dữ liệu INT.

Bây giờ chúng ta đã hoàn tất với lớp mô hình gốc, hãy tạo các mô hình Pals của chúng ta

Tạo một tệp mới trong application/models/Pals.php

Thêm mã sau đây

<?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();
    }
}

ĐÂY,

  • class Pals mở rộng BaseModel {…} mở rộng mô hình cha BaseModel và tự động làm cho tất cả các phương thức được xác định trong BaseModel được truy cập vào lớp con.
  • được bảo vệ $table = 'bạn bè'; xác định tên bảng được liên kết với mô hình mẹ của chúng tôi
  • __construct() {…} khởi tạo hàm tạo gốc
  • public function get_by_id($id) {…} ghi đè get_by_id để cung cấp cách triển khai tùy chỉnh cụ thể cho mô hình Pals. Truy vấn get_by_id sử dụng phép nối để lấy tên thành phố từ bảng thành phố
  • public function get_all() {…} ghi đè phương thức get_all để triển khai truy vấn nối giữa bảng bạn bè và thành phố

Tạo một tệp mới trong application/models/Cities.php

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

ĐÂY,

được bảo vệ $table = 'thành phố'; định nghĩa bảng cơ sở dữ liệu mô hình.

Như bạn có thể thấy từ đoạn mã ở trên, kế thừa giúp chúng ta tiết kiệm rất nhiều thời gian khi làm việc với các mô hình. CodeBộ phận đánh lửa. Trong phần tiếp theo, chúng ta sẽ tìm hiểu

Bộ điều khiển Trình quản lý Danh bạ

Bây giờ chúng ta đã tạo xong các mô hình, hãy tạo bộ điều khiển cho ứng dụng của chúng ta. Chúng ta sẽ có hai bộ điều khiển là Danh bạ và Thành phố

Hãy bắt đầu với các thành phố

Tạo một tệp mới Cities.php trong thư mục ứng dụng/bộ điều khiển

Thêm mã sau đây

<?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'));
    }
}

ĐÂY,

Đoạn mã trên thực hiện tất cả các phương thức cần tạo, cập nhật, xóa và đọc các hàng từ cơ sở dữ liệu.

Tạo một tệp khác Contacts.php trong ứng dụng/bộ điều khiển

Thêm mã sau đây

<?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'));
    }
}

Chế độ xem Trình quản lý Danh bạ

Chúng ta đã xem xét các biểu mẫu và xác thực trong CodeChúng ta đã sử dụng Igniter trong các bài hướng dẫn trước. Để đảm bảo tính đầy đủ, chúng ta sẽ sao chép lại đoạn mã đã tạo trong các bài hướng dẫn trước.

Quan điểm của ứng dụng của chúng tôi sẽ như sau

Chế độ xem Trình quản lý Danh bạ

Bạn có thể tải xuống mã cho các chế độ xem trên bằng cách nhấp vào liên kết bên dưới

CodeTải xuống Trình quản lý danh bạ Igniter

Tổng kết

Trong hướng dẫn này, Bạn sẽ học cách tạo mô hình trong CodeIgnite. Chúng tôi đã tận dụng tính kế thừa trong lập trình hướng đối tượng để thúc đẩy khả năng tái sử dụng mã bằng cách tạo ra một mô hình cơ sở triển khai bốn hoạt động cơ sở dữ liệu chính là chèn, đọc, cập nhật và xóa.

Chúng tôi đã trình bày các khái niệm bằng cách sử dụng một ứng dụng thực tế và chúng tôi sẽ tiếp tục làm như vậy trong các hướng dẫn tiếp theo bằng cách bổ sung thêm nhiều chức năng hơn cho ứng dụng.

Tóm tắt bài viết này với: