[Codeigniter]: Quy trình tương tác cơ sở dữ liệu trong model

Thảo luận trong 'Codeigniter (CI)' bắt đầu bởi PeaJaStr, 27/3/15.

  1. PeaJaStr

    PeaJaStr Moderator Staff Member

    Tham gia:
    27/3/15
    Bài viết:
    193
    "Thích" đã nhận:
    54
    Điểm nhận Cup:
    28
    Giới tính:
    Nam
    Ở 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:

    $db['default']['hostname'] = 'localhost'; $db['default']['username'] = 'root'; $db['default']['password'] = ''; $db['default']['database'] = 'qhonline';

    $db['default']['hostname']='localhost';
    $db['default']['username']='root';
    $db['default']['password']='';
    $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:

    $this->load->database();
    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.

    <?php class Muser extends CI_Model{ public function __construct(){ parent::__construct(); $this->load->database(); } }

    <?php
    classMuserextendsCI_Model{
    publicfunction__construct(){
    parent::__construct();
    $this->load->database();
    }
    }
    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:

    <?php class Muser extends CI_Model{ public function __construct(){ parent::__construct(); $this->load->database(); } public function listall(){ $query=$this->db->get("user"); return $query->result_array(); } }

    <?php
    classMuserextendsCI_Model{
    publicfunction__construct(){
    parent::__construct();
    $this->load->database();
    }
    publicfunctionlistall(){
    $query=$this->db->get("user");
    return$query->result_array();
    }
    }
    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:

    <?php class User extends CI_Controller{ public function __construct(){ parent::__construct(); } public function index(){ $this->load->Model("Muser"); $data=$this->Muser->listall(); echo "<pre>"; print_r($data); echo "</pre>"; } }


    <?php
    classUserextendsCI_Controller{
    publicfunction__construct(){
    parent::__construct();
    }
    publicfunctionindex(){
    $this->load->Model("Muser");
    $data=$this->Muser->listall();
    echo"<pre>";
    print_r($data);
    echo"</pre>";
    }
    }
    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:

    $this->load->Model("Tên_Model");

    $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:

    $this->Tên_Model->Tên_Phương_Thức();

    $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

    $this->db->select("tên cột 1, tên cột 2");

    $this->db->select("tên cột 1, tên cột 2");
    + Truy vấn với điều kiện:

    $this->db->where("trường","Giá trị");

    $this->db->where("trường","Giá trị");
    + Sắp xếp kết quả trả về theo 1 trường nào đó.

    $this->db->order_by("tên cột asc hoặc desc");

    $this->db->order_by("tên cột asc hoặc desc");
    + Giới hạn kết quả trả về:

    $this->db->limit("Số record trên 1 trang","Vị trí bắt đầu");

    $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:

    $query->result_array();

    $query->result_array();
    + Lấy 1 record trong dữ liệu:

    $query->row_array();

    $query->row_array();
    + Đếm số xem có bao nhiêu dòng:

    $query->num_rows();

    $query->num_rows();
    Ví dụ:

    public function listall(){ $this->db->select("username,password"); $this->db->where("level","2"); $this->db->order_by("id desc"); $this->db->limit(1,0); $query=$this->db->get("user"); return $query->result_array(); }


    publicfunctionlistall(){
    $this->db->select("username,password");
    $this->db->where("level","2");
    $this->db->order_by("id desc");
    $this->db->limit(1,0);
    $query=$this->db->get("user");
    return$query->result_array();
    }
    2- Thao tác thêm, xóa, sửa dữ liệu:

    + Thêm dữ liệu
    $this->db->insert("tên bảng","mảng dữ liệu");

    $this->db->insert("tên bảng","mảng dữ liệu");

    Ví dụ:
    public function insert_user($data){ $this->db->insert("user",$data); }

    publicfunctioninsert_user($data){
    $this->db->insert("user",$data);
    }
    + Sửa dữ liệu
    $this->db->update("tên bảng","mảng dữ liệu");

    $this->db->update("tên bảng","mảng dữ liệu");

    Ví dụ:
    public function update_user($data,$id){ $this->db->where("id","$id"); $this->db->update("user",$data)l }

    publicfunctionupdate_user($data,$id){
    $this->db->where("id","$id");
    $this->db->update("user",$data)l
    }

    + Xóa dữ liệu
    $this->db->delete("tên_bảng");

    $this->db->delete("tên_bảng");

    Ví dụ:
    public function delete_user($id){ $this->db->where("id","$id"); $this->db->delete("user"); }

    publicfunctiondelete_user($id){
    $this->db->where("id","$id");
    $this->db->delete("user");
    }

    Với biến $data của chúng ta là một mảng dữ liệu:
    Ví dụ:
    $data=array( "username" => "kenny", "password" => "12345", "website" => "qhonline.info", "email" => "kenny@qhonline.info" );

    $data=array(
    "username"=>"kenny",
    "password"=>"12345",
    "website" =>"qhonline.info",
    "email"=>"kenny@qhonline.info"
    );

    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”);
    public function listall(){ $result=$this->db->query("select * from user order by id desc"); echo "<pre>"; print_r($result->result_array()); echo "</pre>"; }

    publicfunctionlistall(){
    $result=$this->db->query("select * from user order by id desc");
    echo"<pre>";
    print_r($result->result_array());
    echo"</pre>";
    }

    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.


    Nguồn: qhonline
     

    Bình Luận Bằng Facebook

  2. lanhoang174404

    lanhoang174404 New Member

    Tham gia:
    27/12/16
    Bài viết:
    9
    "Thích" đã nhận:
    0
    Điểm nhận Cup:
    1
    Giới tính:
    Nam
    Bài viết của bạn rất hay , chia sẽ thêm nữa nhé , những thông tin thế này rất hữu ích
     
  3. lechi123

    lechi123 New Member

    Tham gia:
    22/9/16
    Bài viết:
    1
    "Thích" đã nhận:
    0
    Điểm nhận Cup:
    1
    Giới tính:
    Nam
    Trang chủ:
    - Áo ngực kiểu Croptop trơn siêu xinh
    - Chất liệu: Vải cotton, nhẹ nhàng và thoáng khí.
    - Mút đệm vừa

    [​IMG]
    - Thiết kế cá tính form ôm nhẹ nhàng không gây cảm giác khó chịu, tôn được đường cong, thêm phần nữ tính quyến rũ giúp bạn nữ thêm trẻ trung khi xuất hiện trước cộng đồng.
    - Bạn có thể phối hợp với jeans, quần kaki, quần short... Đều làm cho bạn trở nên thu hút nổi bật trong những hoạt động khác nhau.
    - Mẫu áo ngực kiểu crop top hai dây là item khá "đa zi năng". Nếu muốn tạo cho mình phong cách trẻ trung và nữ tính, bạn có thể thử phối crop top hai dây với sơmi làm áo khoác.
    - Khi muốn đi theo style điệu đà, gợi cảm, hãy tự tin mix kiểu áo này với chân váy ngắn chữ A và thay bằng chân váy bút chì nếu bạn muốn trông mình già dặn, chín chắn hơn.
    - Với thiết kế hai dây nhẹ nhàng, mềm mại, crop top hai dây sẽ làm nổi bật phần vai và cánh tay của người mặc, bởi vậy những cô nàng có bờ vai và cánh tay thon, săn chắc có thể trưng dụng kiểu áo này để nêu bật ưu điểm của mình.
    - Áo ngực kiểu croptop có phần ngực khoét sâu hơn các kiểu áo khác thích hợp để diện cùng các loại vòng cổ, dây chuyền

    [​IMG]

    - Cagedbra shop CAM KÊT :
    - Tất cả các sản phẩm đồ lót tại shop là sản phẩm hoàn hảo - chất lượng vượt trội.
    - Tất cả các sản phẩm đều được tự chụp - Sản phẩm khách hàng đặt mua khi nhận được sẽ giống y như hình ảnh đã đăng.
    - Để đươc tư vấn truy cập tại đây https://www.facebook.com/aocagedbrahanoi hoặc seach từ khóa áo bra
    ---------------------------------
    - HOTLINE : 0982.928.693
    - GIAO HÀNG TẬN NƠI TRÊN TOÀN QUỐC
    - THANH TOÁN SAU KHI NHẬN HÀNG
    - INBOX hay COMMENT trực tiếp.
     
  4. bannhadep12345

    bannhadep12345 New Member

    Tham gia:
    12/1/18
    Bài viết:
    1
    "Thích" đã nhận:
    0
    Điểm nhận Cup:
    1
    Giới tính:
    Nam
    TINH DẦU TREO XE Ô TÔ. MANG CẢ VƯỜN HOA ĐẾN XẾ YÊU CỦA BẠN.
    CHƯƠNG TRÌNH KHUYẾN MÃI ĐẶC BIỆT
    MUA 2 LỌ MIỄN PHÍ SHIP TẬN NHÀ
    MUA 4 LỌ GIẢM 10% + MIỄN PHÍ SHIP
    CÒN CHỜ GÌ NỮA, HÃY INBOX NGAY ĐỂ NHẬN ƯU ĐÃI HẤP DẪN VỚI TINH DẦU TREO XE HM NHÉ.
    Đồng giá 100K/1lọ dùng được 3 tháng. khi mở mắp 24/24
    Các mùi hương chiết xuất từ thiên nhiên nên ít mùa và sản xuất thủ công nấu tràm tịa thị xã Phú lộc - Huế
    Tinh dầu Oải Hương Mỹ: thơm ngọt nhè nhẹ dễ chịu, giúp thư giãn giảm stress, giúp ngủ ngon.
    Tinh Dầu Ngọc Lan Tây: thơm quyến rũ, ngọt ngào.
    Tinh Dầu Hoa Nhài: thơm ngất ngây, sang trọng, quý phái.
    Tinh Dầu Bạc Hà: chống say xe, thơm mát, sảng khoái giúp tỉnh táo.
    Tinh Dầu Sả Chanh: khử mùi tốt, thư thái, nhẹ hơn sả java.
    Tinh Dầu Quế: khử mùi tốt, tính nóng thích hợp dùng mùa đông.
    Tinh dầu Tràm: tăng năng lượng, giảm mệt mỏi. Kích thích hệ thần kinh.

    Shop https://www.facebook.com/myphamlovelife/ tại http://myphamlovelife.vn/ 912 trần cao vân. TP Đà Nẵng, đt: 0915444885 - 0985979484
     

Share This Page