Thứ Năm, 18 tháng 6, 2015

Làm việc với Model trong CodeIgniter Framework

Trong phần trước chúng ta đã tìm hiểu cách làm việc với View trong CodeIgniter Framework. Bài này chúng ta tiếp tục đi tìm hiểu một thao tác quan trọng nữa trong CodeIgniter đó là làm việc với Model trong CodeIgniter Framework.

Vậy Model trong CodeIgniter là gì và Model dùng để làm gì?

Model là tầng xử lý trung gian, nó nhận yêu cầu của các Controller và tương tác với cơ sở dữ liệu để trả về kết quả dưới dạng mảng dữ liệu. Tiếp đó chúng ta sẽ lấy các dữ liệu đó ra và đem hiển thị ở View.

Cấu hình kết nối với cơ sở dữ liệu

Vào file database.php theo đường dẫn application/config. Ta điều chỉnh các nội dungn
$db['default']['hostname'] = 'hosting';
$db['default']['username'] = 'user';
$db['default']['password'] = 'pass';
$db['default']['database'] = 'dbName';

Trong đó:

  • hosting : là hosting website của bạn.
  • user : là tên đăng nhập vào cơ sở dữ liệu.
  • pass: là mật khẩu đăng nhập vào cơ sở dữ liệu.
  • dbName: là tên cơ sở dữ liệu.

Sau khi đã thiết lập kết nối như trên thì khi nào cần sử dụng đến cơ sở dữ liệu chúng ta chỉ việc sử dụng cú pháp
$this->load->database();

Để hiểu rõ hơn vấn đề, chúng ta đi làm một ví dụ như sau:

In ra tất cả các thông tin của một bảng bất kỳ trong cơ sở dữ liệu. Giả sử trong trường hợp của tôi thì tôi có cơ sở dữ liệu “mydb” và trong đó có bảng khach_hang với 3 trường dữ liệu lần lượt là idCustomer, name, phone.

Bây giờ chúng ta sẽ đi xây dựng một hàm có chức năng lấy toàn bộ thông tin của bảng khach_hang. Trong thư mục models tạo mới một file có tên là mcustomer với nội dung như sau:
<?php
 Class Mcustomer extends CI_Model{
  function __construct(){
    parent::__construct();
    $this->load->database();
  }

  function get_all(){
    $query = $this->db->get("khach_hang");
    return $query->result_array();  
  }
 }

?>
Trong thư mục controllers tạo mới một file có tên customer.php nội dung như sau :
<?php
 Class Customer extends CI_Controller{
  function __construct(){
    parent::__construct();
    $this->load->model('Mcustomer');
  }

  function show(){
    $data = $this->Mcustomer->get_all();
    print_r($data);
  }
 }
?>
Trên thanh địa chỉ của trình duyệt ta truy cập tới: http://localhost/democi/index.php/customer/show để kiểm tra kết quả.

Đến bước này chắc có nhiều thắc mắc trong đầu các bạn. Chúng ta sẽ lần lượt phân tích ví dụ trên

Trong file mcustomer.php trong model

  • Đặt tên class tương tự như đặt tên class trong Controller, đó là tên class giống với tên file và phải viết hoa chữ cái đầu tiên.
  • Hàm __construct() là hàm khởi tạo, có chức năng thực thi toàn bộ nội dung trong nó mà không cần phải gọi đến hàm.
  • Câu lệnh $this->db->get(“khach_hang”) là câu lệnh lấy ra toàn bộ thông tin trong bản khach_hang. Tương đương với câu lệnh truy vấn “SELECT * FROM khach_hang” trong SQL.
  • Câu lệnh $query->result_array() là câu lệnh lấy dữ liệu trả về từ câu truy vấn dưới dạng mảng.

Trong file customer.php trong model

  • Câu lệnh $this->load->model(“Mcustomer”) là câu lệnh dùng để load model có tên là Mcustomer.
  • Chúng ta gọi đến một chức năng trong model theo cú pháp $this->tên_model->tên_hàm, như ở trên ta có $this->Mcustomer->get_all().

Như vậy các bạn đã nắm được quá trình làm việc với Model, từ đó sẽ phát triển hoc php lên và tùy thuộc vào mục đích,  chức năng mà bạn muốn xây dựng.

Một số phương thức tương tác cơ sở dữ liệu trên model trong CodeIgniter Framework

1. Lựa chọn trường dữ liệu
$this->db->select("trường_dữ_liệu_1", "trường_dữ_liệu_1", ....);

2. Điều kiện truy vấn
$this->db->where("trường_dữ_liệu","giá_trị");

3. Câu lệnh sắp xếp
$this->db->order_by("trường_sắp_xếp ASC | DESC");

4. Lấy tất cả bản ghi từ truy vấn
$query->result_array();

5. Lấy một bản ghi từ truy vấn
$query->row_array();

6. Đếm số dòng trả về từ truy vấn
$query->num_rows();

7. Thêm dữ liệu
$this->db->insert("tên_bảng","mảng_dữ_liệu");

8. Sửa dữ liệu
$this->db->update("tên_bảng","mảng_dữ_liệu");

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

SHARE THIS

0 nhận xét:

Lưu ý: Chỉ thành viên của blog này mới được đăng nhận xét.