Ở bài trước, chúng ta đã tìm hiểu qua về quy trình làm việc trên view của codeigniter framework. Tiếp tục ở bài này, chúng ta sẽ cùng phân tích và tìm hiểu thêm về quy trình tương tác cơ sở dữ liệu trên model như thế nào. Để từ đó vận dụng tốt chúng trong quá trình viết các ứng dụng sau này
11 trang |
Chia sẻ: vietpd | Lượt xem: 1898 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Codeigniter Framework: Tương tác cơ sở dữ liệu trên model, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Codeigniter Framework: Tương tác cơ sở dữ liệu trên
model
Ở bài trước, chúng ta đã tìm hiểu qua về quy trình làm việc trên view của
codeigniter framework. Tiếp tục ở bài này, chúng ta sẽ cùng phân tích và
tìm hiểu thêm về quy trình tương tác cơ sở dữ liệu trên model như thế nào.
Để từ đó vận dụng tốt chúng trong quá trình viết các ứng dụng sau này.
Vậy trước hết, ta tìm hiểu xem model là gì ?. Và tại sao phải sử dụng model?.
Model là tầng xử lý những tác vụ liên quan đến tương tác cơ sở dữ liệu từ
những yêu cầu của controller. Model xử lý và trả về kết quả dưới dạng một
mảng dữ liệu, khi đó thông qua view ta sẽ đẩy nội dung của mảng dữ liệu ấy
ra bên ngoài. Việc tách biệt tầng model có rất nhiều thuận lợi, trước là dễ
quản lý sau là dễ nâng cấp và phát triển trong tương lai của mã nguồn.
Model trong codeigniter cũng vậy, cũng có những cách tương tác riêng biệt.
Bài viết này sẽ hướng dẫn các bạn những tháo tác chính trong xử lý model
như thế nào.
Để có thể tương tác với cơ sở dữ liệu trong codeigniter thì trước hết ta phải
cấu hình thông tin kết nối với CSDL tại file database.php trong thư mục
application/config.
Chú ý 4 thông tin sau:
1 $db['default']['hostname'] = 'localhost';
2 $db['default']['username'] = 'root';
3 $db['default']['password'] = '';
4 $db['default']['database'] = 'qhonline';
Vì tôi đang chạy là xampp, nên phần mật khẩu sẽ là rỗng và tên CSDL của
tôi sẽ là qhonline.
Nếu chúng ta đã cấu hình xong trong file database này. Thì bất cứ lúc nào,
nếu chúng ta muốn kết nối với CSDL. Chúng ta chỉ việc gọi phương thức:
1 $this->load->database();
Kế tới sẽ là tương tác với model, tại thư mục models trong application ta tạo
1 file ví dụ như muser.php. Lưu ý là không được đặt trùng tên với controller.
Ví dụ: controller là user.php thì model không được phép là user.php. Vì như
thế hệ thống sẽ báo lỗi do không thể hiểu bạn đang muốn gọi controller hay
model. Do vậy, trong trường hợp này ta dùng thêm chữ m đứng trước để
phân biệt.
1 <?php
2 class Muser extends CI_Model{
3 public function __construct(){
4 parent::__construct();
5 $this->load->database();
6 }
7 }
Giống với controller, khi tạo lớp Muser thì chứ đầu tiên chúng ta phải viết
hoa. Và để không ghi đè lên các construct có sẵn chúng ta phải dùng từ khóa
parent để giữ lại các kết quả. Đồng thời, tại đây ta cũng kết nối với cơ sở dữ
liệu luôn. Việc này giúp ta dễ dàng thao tác hơn với các phương thức bên
dưới.
Tiếp tục ta tạo một phương thức có chức năng liệt kê tất cả record trong bảng
user bằng đoạn code sau:
01 <?php
02 class Muser extends CI_Model{
03 public function __construct(){
04 parent::__construct();
05 $this->load->database();
06 }
07 public function listall(){
08 $query=$this->db->get("user");
09 return $query->result_array();
10 }
11 }
Phương thức listall() được thêm vào. $this->db->get("user") là một active
record nó tương đương với câu truy vấn thường của chúng ta vậy "select *
from user". Mục đích có active record là để rút gọn lại các câu truy vấn, hỗ
trợ người dùng thao tác nhanh hơn và chuyên nghiệp hơn trong quá trình tái
sử dụng lại thư viện.
Lệnh result_array() sẽ đem toàn bộ record đưa ra bên ngoài dưới dạng mảng.
Tiếp tục, trong application/controllers ta tạo file user.php với nội dung:
01 <?php
02 class User extends CI_Controller{
03 public function __construct(){
04 parent::__construct();
05 }
06 public function index(){
07
$this->load-
>Model("Muser");
08 $data=$this->Muser->listall();
09 echo "";
10 print_r($data);
11 echo "";
12 }
13 }
Ta thấy, tại đây có thêm 1 phương thức là index. Với nội dung của nó là nạp
model tên Muser bằng phương thức: $this->load->Model("Muser"). Sau khi
nạp xong Model này, ta lại load tiếp phương thức listall() bằng cách sử dụng
$this->Muser->listall(). Cuối cùng ta xem cấu trúc mảng của chúng bằng cặp
thẻ pre và print_r.
Vậy để nạp 1 model ta có cách nạp như sau:
1 $this->load->Model("Tên_Model");
Sau khi đã nạp xong, ta có cách gọi phương thức trong model như sau:
1 $this->Tên_Model->Tên_Phương_Thức();
Một số phương thức tương tác cơ sở dữ liệu trên model mà ta thường dùng
trong codeigniter framework
1 - Thao tác liệt kê và nhận trả dữ liệu:
+ Lựa chọn tên cột cần lấy
1 $this->db->select("tên cột 1, tên cột 2");
+ Truy vấn với điều kiện:
1 $this->db->where("trường","Giá trị");
+ Sắp xếp kết quả trả về theo 1 trường nào đó.
1 $this->db->order_by("tên cột asc hoặc desc");
+ Giới hạn kết quả trả về:
1 $this->db->limit("Số record trên 1 trang","Vị trí bắt đầu");
+ Lấy tất cả record từ câu truy vấn:
1 $query->result_array();
+ Lấy 1 record trong dữ liệu:
1 $query->row_array();
+ Đếm số xem có bao nhiêu dòng:
1 $query->num_rows();
Ví dụ:
1 public function listall(){
2 $this->db->select("username,password");
3 $this->db->where("level","2");
4 $this->db->order_by("id desc");
5 $this->db->limit(1,0);
6 $query=$this->db->get("user");
7 return $query->result_array();
8 }
2- Thao tác thêm, xóa, sửa dữ liệu:
+ Thêm dữ liệu
1 $this->db->insert("tên bảng","mảng dữ liệu");
Ví dụ:
1 public function insert_user($data){
2 $this->db->insert("user",$data);
3 }
+ Sửa dữ liệu
1 $this->db->update("tên bảng","mảng dữ liệu");
Ví dụ:
1 public function update_user($data,$id){
2 $this->db->where("id","$id");
3 $this->db->update("user",$data)l
4 }
+ Xóa dữ liệu
1 $this->db->delete("tên_bảng");
Ví dụ:
1 public function delete_user($id){
2 $this->db->where("id","$id");
3 $this->db->delete("user");
4 }
Với biến $data của chúng ta là một mảng dữ liệu:
Ví dụ:
1 $data=array(
2 "username" => "kenny",
3 "password" => "12345",
4 "website" => "qhonline.info",
5 "email" => "kenny@qhonline.info"
6 );
Trong trường hợp bạn không muốn dùng active record. Thì vẫn có thể viết
câu truy vấn bình thường thông qua cú pháp $this->db->query("Câu
query");
1 public function listall(){
2 $result=$this->db->query("select * from user order by id desc");
3 echo "";
4 print_r($result->result_array());
5 echo "";
6 }
Bạn thấy đấy, tương tác và sử dụng model trong Codeigniter Framework
thật đơn giản phải không nào. Nếu bạn kiên nhẫn tham khảo và thực hành bài
viết này, tôi tin bạn đã có thể bắt tay vào viết ứng dụng từng bước một rồi
đấy. Trong bài kế, tôi sẽ mổ sẻ về một số vấn đề liên quan đến kiểm tra tính
hợp lệ của dữ liệu trên form. Qua đó ta có thể dễ dàng viết được các chức
năng thêm record một cách dễ dàng.