Hoàng Web

Thiết Kế Website WordPress

  • Kho giao diện
  • Dịch Vụ
    • Thiết kế web giá rẻ
    • Thiết kế website WordPress
    • Hosting Miễn Phí 100GB
    • Tích hợp thanh toán MoMo, ViettelPay, Vietcombank, MB..
    • Tối ưu Google PageSpeed
    • Sửa lỗi nâng cấp website
    • Viết plugin WordPress
    • Code Tool theo yêu cầu
  • Bảng giá
  • Quy trình làm việc
  • Giới thiệu
  • Liên Lạc
Trang chủ » Programming » Codeigniter » Lưu dữ liệu trong Codeigniter với Active Record Class

Lưu dữ liệu trong Codeigniter với Active Record Class

Thứ Tư, 18/03/2015 by Hoàng Quách

Nội dung

  • 1 Codeigniter Active record class là gì?
  • 2 Sử dụng Active Record
  • 3 Trở ngại
  • 4 Thực hiện lệnh Union
  • shares
  • Facebook
  • 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
  • Facebook Messenger
  • Gmail
  • Viber
  • Skype

Chuyên mục: Codeigniter Tìm kiếm: codeigniter

Comments

  1. qua says

    Thứ Năm, 16/04/2020 at 1:53 chiều

    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

Tôi giúp gì cho bạn?

HOÀNG WEB

Địa chỉ: Tây Sơn, Phường Quang Trung, Quận Đống Đa, Hà Nội

Hotline: 0987 342 124 – 0868 292 303 (8h:00 – 21h:00)

Email: [email protected]

Website: www.hoangweb.com

KẾT NỐI VỚI TÔI

  • Facebook
  • GitHub
  • YouTube

SẢN PHẨM

  • Plugin Thanh Toán Quét Mã QR Code Tự Động
  • WP2Speed – Tối ưu Google Speed
  • 23WebHost – Hosting Miễn Phí 100GB

LIÊN KẾT

  • Có nên thuê thiết kế website giá rẻ?
  • Hướng dẫn thanh toán
  • Chính sách hoàn tiền
  • Trung tâm hỗ trợ

Copyright © 2023 | All rights reserved | HOANG WEB
Mọi hình thức sao chép nội dung trên website này mà chưa được sự đồng ý đều là trái phép.