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:
class Blog_controller extends CI_Controller {function blog()
{
$this->load->model(‘Blog’);$data[‘query’] = $this->Blog->get_last_ten_entries();
$this->load->view(‘blog’, $data);
}
}
Tự động load model (autoload)
Đôi khi một hoặc một vài model cần thiết trong cả ứng dụng của bạn, bạn có thể cấu hình để load tự động các model này trong application/config/autoload.php. Bạn có thể thêm vào cả một mảng chứa tên các model cần thiết để load tự động.
Có một số vấn đề khi kết nối database thông qua model, tôi sẽ đề cập chi tiết trong một số bài viết khác.
Thân!