Thú thực mà nói cũng không khoái viết mấy bài hàn lâm này cho lắm, nhưng mà sợ một số bạn theo dõi series này không hiểu lại thắc mắc, thôi thì viết luôn ^_^

Bài này mình nói ngắn gọn qua về model trong CodeIgniter. Model là những class làm việc với database. Xem thử ví dụ sau nha:

class Blogmodel extends CI_Model {

var $title = ”;
var $content = ”;
var $date = ”;

function __construct()
{
// Call the Model constructor
parent::__construct();
}

function get_last_ten_entries()
{
$query = $this->db->get(‘entries’, 10);
return $query->result();
}

function insert_entry()
{
$this->title = $_POST[‘title’]; // please read the below note
$this->content = $_POST[‘content’];
$this->date = time();

$this->db->insert(‘entries’, $this);
}

function update_entry()
{
$this->title = $_POST[‘title’];
$this->content = $_POST[‘content’];
$this->date = time();

$this->db->update(‘entries’, $this, array(‘id’ => $_POST[‘id’]));
}

}

Đoạn mã trên khai báo một model class Blogmodel với các thao tác get_last_ten_entries(): lấy ra 10 bài viết mới nhất trong database, insert_entry(): thêm 1 bài vào database, update_entry(): update data …

* Lưu ý:

  • Các function trên sử dụng các hàm Active Record (mình sẽ nói rõ hơn trong bài sau).
  • Ví dụ trên sử dụng $_POST để đơn giản và dễ hình dung. Trên thực tế vì lý do bảo mật cần thay thế bằng: $this->input->post(...).

Cấu trúc model

Quy tắc đặt tên file, tên class tương ứng giống như controller :)). Bạn cũng có thể tổ chức model trong các thư mục con nếu cần thiết. Ví dụ tên file là my_model.php thì class tương ứng là My_model (nhớ là luôn extends CI_Model nha). Tham khảo thêm trong user guide nha, có gì thắc mắc cứ comment dưới mình sẽ giải đáp.

Load model trong controller như thế nào?

Sử dụng câu lệnh sau:

$this->load->model('Model_name');

Sau này để sử dụng model trên chỉ cần: $this->Model_name->function();

Đôi khi bạn không thích tên model cho lắm và muốn thay đổi. Bạn có thể sử dụng cách này:

$this->load->model(‘Model_name’, ‘fubar’);

$this->fubar->function();

Xem ví dụ về controller dưới đây: