Cơ sở dữ liệu CodeIgniter: Cấu hình, chỉnh sửa, cập nhật, xóa dữ liệu
Cơ sở dữ liệu Codeigniter
Trong hướng dẫn trước, chúng ta đã trình bày những kiến thức cơ bản về bản ghi hoạt động CodeIgniter 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 các bản ghi cơ sở dữ liệu. nếu bạn hoàn toàn mới làm việc với cơ sở dữ liệu trong CodeIgniter thì bạn nên đọc hướng dẫn trước đó
Cấu hình cơ sở dữ liệu Codeigniter
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`) ) ;
Mô hình cơ sở dữ liệu CodeIgniter
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ụ.
Trong CodeIgniter, mỗi mô hình phải xác định 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 mô hình, 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 mô hình cha để xác định các phương thức cơ bản mà chúng ta mong muốn các mô hình 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.
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, 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 CodeIgniter. 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 CodeIgniter trong các hướng dẫn trước. Chúng tôi sẽ sử dụng mã mà chúng tôi đã phát triển trong các hướng dẫn trước. Để hoàn thiện hơn, chúng tôi sẽ tạo lại mã mà chúng tôi đã tạo trong các hướng dẫn trước.
Quan điểm của ứng dụng của chúng tôi sẽ như sau
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
CodeIgniter Chế độ xem Trình quản lý Danh bạ Tải xuống
Tổng kết
Trong hướng dẫn này, Bạn sẽ học cách tạo mô hình trong CodeIgniter. 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.