Kết quả 1 đến 4 của 4
  1. #1
    Super Moderator tinhphaistc's Avatar
    Ngày tham gia
    01-03-2013
    Bài viết
    693
    Cảm ơn
    244
    Được cảm ơn 278 trong 210 bài viết

    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:
    PHP Code:
    PHP Code:
     $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:
    PHP Code:
    PHP Code:
     $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 Code:
    PHP Code:
     <?php
    class Muser extends CI_Model{
        public function 
    __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 Code:

    PHP Code:
     <?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();
        }
    }  
    ?>
    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 Code:
    PHP Code:
    <?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>";
        }
    }  

     
    ?>

    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:
    PHP Code:
    PHP Code:
     $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:
    PHP Code:
    PHP Code:
     $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
    PHP Code:
    PHP Code:
     $this->db->select("tên cột 1, tên cột 2"); 
    + Truy vấn với điều kiện:
    PHP Code:
    PHP Code:
     $this->db->where("trường","Giá trị"); 
    + Sắp xếp kết quả trả về theo 1 trường nào đó.
    PHP Code:
    PHP Code:
      $this->db->order_by("tên cột asc hoặc desc"); 
    + Giới hạn kết quả trả về:
    PHP Code:
    PHP Code:
     $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:
    PHP Code:
    PHP Code:
     $query->result_array(); 
    + Lấy 1 record trong dữ liệu:
    PHP Code:
    PHP Code:
     $query->row_array(); 
    + Đếm số xem có bao nhiêu dòng:
    PHP Code:
    PHP Code:
         $query->num_rows(); 
    Ví dụ:

    PHP Code:
    PHP Code:
         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();
        } 
    2- Thao tác thêm, xóa, sửa dữ liệu:
    + Thêm dữ liệu
    PHP Code:
    PHP Code:
         $this->db->insert("tên bảng","mảng dữ liệu"); 
    Ví dụ:
    PHP Code:
    PHP Code:
         public function insert_user($data){
            
    $this->db->insert("user",$data);
        } 
    + Sửa dữ liệu
    PHP Code:
    PHP Code:
         $this->db->update("tên bảng","mảng dữ liệu"); 
    Ví dụ:
    PHP Code:
    PHP Code:
         public function update_user($data,$id){
            
    $this->db->where("id","$id");
            
    $this->db->update("user",$data)l
        

    + Xóa dữ liệu
    PHP Code:
    PHP Code:
         $this->db->delete("tên_bảng"); 
    Ví dụ:
    PHP Code:
    PHP Code:
         public function delete_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ụ:
    PHP Code:
    PHP Code:
         <?php
          $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");
    Ví dụ:
    PHP Code:
    PHP Code:
         public function listall(){
            
    $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
    Sửa lần cuối bởi tinhphaistc; 01-03-2013 lúc 10:32 PM.

  2. #2
    CI New hacker27's Avatar
    Ngày tham gia
    10-02-2014
    Bài viết
    8
    Cảm ơn
    3
    Được cảm ơn 0 trong 0 bài viết
    Trích dẫn Gửi bởi tinhphaistc Xem bài viết
    Ở 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:
    PHP Code:
    PHP Code:
     $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:
    PHP Code:
    PHP Code:
     $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 Code:
    PHP Code:
     <?php
    class Muser extends CI_Model{
        public function 
    __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 Code:

    PHP Code:
     <?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();
        }
    }  
    ?>
    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 Code:
    PHP Code:
    <?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>";
        }
    }  

     
    ?>

    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:
    PHP Code:
    PHP Code:
     $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:
    PHP Code:
    PHP Code:
     $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
    PHP Code:
    PHP Code:
     $this->db->select("tên cột 1, tên cột 2"); 
    + Truy vấn với điều kiện:
    PHP Code:
    PHP Code:
     $this->db->where("trường","Giá trị"); 
    + Sắp xếp kết quả trả về theo 1 trường nào đó.
    PHP Code:
    PHP Code:
      $this->db->order_by("tên cột asc hoặc desc"); 
    + Giới hạn kết quả trả về:
    PHP Code:
    PHP Code:
     $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:
    PHP Code:
    PHP Code:
     $query->result_array(); 
    + Lấy 1 record trong dữ liệu:
    PHP Code:
    PHP Code:
     $query->row_array(); 
    + Đếm số xem có bao nhiêu dòng:
    PHP Code:
    PHP Code:
         $query->num_rows(); 
    Ví dụ:

    PHP Code:
    PHP Code:
         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();
        } 
    2- Thao tác thêm, xóa, sửa dữ liệu:
    + Thêm dữ liệu
    PHP Code:
    PHP Code:
         $this->db->insert("tên bảng","mảng dữ liệu"); 
    Ví dụ:
    PHP Code:
    PHP Code:
         public function insert_user($data){
            
    $this->db->insert("user",$data);
        } 
    + Sửa dữ liệu
    PHP Code:
    PHP Code:
         $this->db->update("tên bảng","mảng dữ liệu"); 
    Ví dụ:
    PHP Code:
    PHP Code:
         public function update_user($data,$id){
            
    $this->db->where("id","$id");
            
    $this->db->update("user",$data)l
        

    + Xóa dữ liệu
    PHP Code:
    PHP Code:
         $this->db->delete("tên_bảng"); 
    Ví dụ:
    PHP Code:
    PHP Code:
         public function delete_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ụ:
    PHP Code:
    PHP Code:
         <?php
          $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");
    Ví dụ:
    PHP Code:
    PHP Code:
         public function listall(){
            
    $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
    Mình làm thử và bị lỗi như thế này ai có thể chỉ giúp mình được không?
    Name:  1.JPG
Views: 168
Size:  32.6 KB

  3. #3
    Moderator vudesign's Avatar
    Ngày tham gia
    23-01-2014
    Bài viết
    324
    Cảm ơn
    22
    Được cảm ơn 45 trong 39 bài viết
    db không phải là biến . lỗi trên nom na là không tìm thuộc tính $db . Bỏ dấu $ trước

  4. The Following User Says Thank You to vudesign For This Useful Post:

    hacker27 (11-02-2014)

  5. #4
    CI New hacker27's Avatar
    Ngày tham gia
    10-02-2014
    Bài viết
    8
    Cảm ơn
    3
    Được cảm ơn 0 trong 0 bài viết
    ok bạn, mình đã làm được rồi ! tk nhieu

Chia sẽ và Bình Luận chủ đề Codeigniter Framework: Tương tác cơ sở dữ liệu trên model trên facebook

Các Chủ đề tương tự

  1. Trả lời: 0
    Bài cuối: 20-06-2014, 11:39 PM
  2. NetBean và framework codeigniter.
    Bởi administrator trong diễn đàn Phần mềm hỗ trợ
    Trả lời: 2
    Bài cuối: 22-11-2013, 01:19 PM
  3. Sử dụng template trong Codeigniter Framework
    Bởi tinhphaistc trong diễn đàn Turtorial
    Trả lời: 0
    Bài cuối: 01-03-2013, 11:02 PM
  4. Codeigniter Framework: Tìm hiểu quy trình làm việc trên view
    Bởi tinhphaistc trong diễn đàn Turtorial
    Trả lời: 0
    Bài cuối: 01-03-2013, 10:18 PM
  5. Codeigniter Framework: Cài đặt và chạy ứng dụng đầu tiên
    Bởi tinhphaistc trong diễn đàn Turtorial
    Trả lời: 0
    Bài cuối: 01-03-2013, 10:12 PM

Các từ khóa xuất hiện trên google của chủ đề

Chưa có từ khóa lên top google

Tag của Chủ đề này - Hãy Thêm Tags Để bài viết nhanh lên top google

Quyền viết bài

  • Bạn không thể đăng chủ đề mới
  • Bạn không thể gửi trả lời
  • Bạn không thể gửi đính kèm
  • Bạn không thể sửa bài
  •