Nội dung
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
Trong bài viết này, mình sẽ giới thiệu khái quát về lớp Active Record để chúng ta làm việc với database trong Codeigniter, các vấn đề mà bạn thường xuyên gặp phải và những giải pháp giúp sử lý lỗi hay sẩy ra khi thiết kế website bằng codeigniter. Mình sẽ sử dụng một vài đoạn code làm ví dụ minh họa cho các bạn dễ hiểu.
Bạn đang làm việc với tính năng có liên quan đến cơ sở dữ liệu trong Codeigniter framework, và bạn cũng đã biết sơ qua về Active Record, đừng lo lắng. Hãy dành vài phút đọc hướng dẫn dưới đây nhé.
Codeigniter Active record class là gì?
“Active record class” là một trong số thành phần rất quan trọng và tính năng thực sự hữu ích của Codeigniter. Nó sẽ giảm thiểu lập trình trình viên thực thi nhiều lệnh SQL phức tạp và được sử dụng trong phần ‘Model’. Thay vì viết cú pháp query, thì chúng ta gọi hàm với tham số đầu vào chỉ định theo tuần tự mà bạn muốn thực thi vào database, và sẽ đưa ra kết quả từ CSDL cho chúng ta một cách nhanh chóng.
Sử dụng Active Record
cũng rất đơn giản, hãy nhớ rằng bạn không nên sử dụng tính năng này trên controller hoặc phần view (thậm trí cũng không sử dụng cho library/plugin/helpers). Vì nó thực sự viết cho model (data access layer). Dưới đây là một số ví dụ mẫu về cách sử dụng Active Record class.
function get_result($id){ //For selecting one or more columns $this->db->select('title, content, date'); //For determine one or more tables to select from $this->db->from('table1'); //For joining with another table, table name as first argument and condition string as second argument $this->db->join('table2', 'comments.id = blogs.id'); //assign where condition $this->db->where('id', $id); //function without any argument. It actually runs the query that was built on last few statements. $this->db->get(); //returns result objects array return $query->result(); }
Chú ý, với phương thức ‘where’ bạn có thể thiết lập nhiều điều kiện bằng cách truyền giá trị mảng gồm cặp key=value. Mặc định các cặp key-value dàng buộc bởi điều kiện AND.
(key=tên cột table db, value= giá trị so sánh).
Chèn data chúng ta có phương thức insert
.
Tham khảo chi tiết cách dùng tham số của lớp active record, xem tại đây.
Bạn có biết? làm sao để xem chuỗi query SQL thực được sinh ra bởi các phương thức trong active record. Bạn có thể lấy nó với phương thức “
$this->db->last_query()
” sau khi thực thi xong. Chúng ta sẽ sử dụng nó ngay sau đây thôi. Nếu bạn muốn xem chi tiết ngay sau tương tác với database bằng active record, bạn có thể kích hoạt profiler như sau:$this->output->enable_profiler(TRUE);
. kết quả chuỗi sql, thời gian hoàn thành,..sẽ hiển thị ra ở dưới trang.
Trở ngại
Thực tế, nếu chúng ta nói về những cách để tạo lệnh SQL dễ hơn, một lựa chọn tốt hơn cho developer hoặc nếu chúng ta muốn sử dụng công nghệ khác như ORM(Object relational mapper) thì điều này sẽ không khó có thể làm được nhiều hơn bạn muốn. Ngoài ra,nó cũng không hỗ trợ nhiều loại database (nhiều cú pháp SQL cho nhiều loại database như MySQL, SQL server,oracle..). Trong trường hợp này, chúng ta sẽ cần sự hỗ trợ từ công cụ third-party bên ngoài điển hình như doctrine, là một thư viện tương thích nhiều với Codeigniter.
Một vấn đề khác, active record không đưa ra nhiều hàm để thực hiện lệnh “UNION” một cách trực tiếp. Trong quá trình lập trình codeigniter mình thấy rất khó với lệnh này.
Thực hiện lệnh Union
Mặc dù hầu hết các hàm trong active record class đều cung cấp bằng các cú pháp select(), select where nhưng không thấy hàm thực thi cho cú pháp UNION. Nếu bạn đang cần thực thi chuỗi SQL có yêu cầu lệnh UNION, chúng ta cũng có thể làm với active record class.
nếu bạn thắc mắc về tốc độ thực thi, tốt nhất là tránh sử dụng active record và viết tự lệnh SQL. Nhưng, nếu bạn không muốn viết query toàn bộ và bạn vẫn muốn dùng active record với giải pháp thay thế, sau đây là cách giúp bạn.
Như mình nói không có cách nào sử dụng trực tiếp ‘UNION’, chúng ta gộp 2 cột khác nhau thành một trong cùng một bảng database, xem đoạn code dưới đây:
Đó là cách thông minh khi kết hợp tận dụng được tính năng của active record, chuẩn bị 2 query SQL khác nhau và lấy chuỗi SQL cuối cùng. Sau đó viết query SQL mới có lệnh UNION là xong.
Chúc bạn học tốt codeigniter.
Nếu bạn thấy bài viết này hữu ích, hãy chia sẻ với bạn bè bằng cách nhấn nút chia sẻ ở bên dưới. Theo dõi chúng tôi trên Twitter và Facebook
- shares
- Facebook Messenger
- Gmail
- Viber
- Skype
qua says
Muốn lấy dự liệu dựa vào 2 điều kiện thì làm sao
ví dụ
bảng tinhthanh
lấy theo điều kiện Name=txtname
và Note=”ABC”
thanks