CodeCơ sở dữ liệu Igniter: Cấu hình, cập nhật và xóa dữ liệu
⚡ Tóm tắt thông minh
CodeIgniter Database xây dựng các mô hình và bộ điều khiển cho trình quản lý danh bạ được hỗ trợ bởi... MySQLMột BaseModel dùng chung thực hiện các thao tác chèn, đọc, cập nhật và xóa, và các model con Pals và Cities kế thừa nó, do đó các controller có thể tái sử dụng cùng một thao tác cơ sở dữ liệu trên toàn ứng dụng.

CodeCơ sở dữ liệu Igniter
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 này sẽ giới thiệu về 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 chưa 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 sẽ hữu ích nếu bạn là người hoàn toàn mới làm quen với việc sử dụng cơ sở dữ liệu. CodeIgniter, bạn nên đọc... hướng dẫn trước đầu tiên.
CodeCấu hình cơ sở dữ liệu Igniter
Chúng ta sẽ bắt đầu bằng việc tạo cơ sở dữ liệu cho 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, với hai bảng có tên là pals và cities they live in (thành phố nơi họ sinh sống). Mối quan hệ giữa pals và cities là một-một, với id trong bảng cities là khóa chính và city_id là khóa ngoại trong 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ờ chúng ta hãy tạo bảng các 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 chí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 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 | Định nghĩa phương thức khởi tạo gọi phương thức khởi tạo của lớp cha. |
| 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ó bất kỳ điều kiện nào. |
| 3 | get_by_id | Truy xuất một hàng duy nhất từ cơ sở dữ liệu bằng cách sử dụng khóa chính kiểu INT có tên là id. |
| 4 | đi đâu | Truy xuất tất cả các trường từ cơ sở dữ liệu dựa trên các tiêu chí đã cho. |
| 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 kiểu INT có tên là id. |
| 7 | xóa | Xóa một bản ghi hiện có khỏi cơ sở dữ liệu dựa trên khóa chính kiểu INT có tên là id. |
Hình ảnh sau đây thể hiện sơ đồ lớp và mối quan hệ giữa các mô hình con Pals và Cities với mô hình cha BaseModel.
Chúng ta sẽ tạo hai mô hình như mô tả trong hình ảnh phía trên. Tạo một lớp mới có tên BaseModel trong application/models/BaseModel.php và thêm đoạn mã sau:
<?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:
- protected $table = ”; định nghĩa một biến được bảo vệ có tên là table. Biến này được lớp con tương ứng gán giá trị để chỉ định bảng nào mà các phương thức của mô hình cơ sở nên tương tác.
- Hàm public __construct() {…} định nghĩa hàm tạo và thực thi hàm 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 $table để chạy truy vấn SELECT.
- get_by_id($id) {…} truy xuất một hàng duy nhất và chấp nhận tham số $id có kiểu dữ liệu INT.
- get_where($where) {…} định nghĩa một phương thức get cho phép bạn thiết lập mệnh đề where.
- insert($data) {…} chấp nhận tham số mảng $data chứa các giá trị cần ghi vào cơ sở dữ liệu.
- update($id, $data) {…} chấp nhận tham số mảng $data chứa các giá trị cần cập nhật.
- delete($id) {…} chấp nhận tham số $id có kiểu dữ liệu INT.
Bây giờ chúng ta đã hoàn thành lớp mô hình cha, hãy tạo mô hình Pals. Tạo một tệp mới trong application/models/Pals_model.php và thêm đoạn mã sau:
<?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:
- Lớp Pals_model kế thừa BaseModel {…} kế thừa mô hình cha BaseModel và tự động làm cho tất cả các phương thức của nó có thể truy cập được từ lớp con.
- protected $table = 'pals'; định nghĩa tên bảng liên kết với mô hình này.
- __construct() {…} khởi tạo hàm tạo của lớp cha.
- Hàm public function get_by_id($id) {…} ghi đè phương thức get_by_id để cung cấp một triển khai tùy chỉnh. Truy vấn sử dụng phép nối để truy xuất tên thành phố từ bảng cities.
- Hàm public function get_all() {…} ghi đè hàm get_all để thực hiện truy vấn kết hợp giữa bảng pals và bảng cities.
Tạo một tệp mới trong thư mục application/models/Cities_model.php:
<?php class Cities_model 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 thấy, tính 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 trong CodeBộ đánh lửa.
Bộ điều khiển Trình quản lý Danh bạ
Bây giờ chúng ta đã tạo xong các model, hãy tạo các controller cho ứng dụng của mình. Chúng ta sẽ có hai controller, Cities và Contacts. Hãy bắt đầu với Cities. Tạo một file mới Cities.php trong thư mục application/controllers và thêm đoạn mã sau:
<?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 thiết để 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 có tên Contacts.php trong thư mục application/controllers và thêm đoạn mã sau:
<?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 đã tìm hiểu về Igniter trong các bài hướng dẫn trước, và chúng ta sẽ sử dụng mã nguồn đã phát triển ở đó. Để hoàn thiện, giao diện của ứng dụng sẽ trông như sau:
Bạn có thể tải xuống mã nguồn của các view 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


