PHP Online

Zend Framework

Zend Framework: Tương tác cơ sở dữ liệu với Zend_Db_Table

Kết thúc bài vừa rồi, chúng ta đã tìm hiểu về quy trình làm việc trên viewcơ bản về layout trong zend framework. Tiếp tục ở bài này, tôi sẽ hướng dẫn các bạn tìm hiểu về quy trình tương tác cơ sở dữ liệu trên model như thế nào. Zend Framework cho ta nhiều phương pháp để tương tác với cơ sở dữ liệu. Và một trong những lớp tương tác với model mà tôi lựa chọn ở đây chính là lớp Zend_Db_Table.

Vậy trước hết, ta tìm hiểu xem model là gì ?. Và tại sao phải sử dụng model ?. Model là tầng xử lý những tác vụ liên quan đến tương tác cơ sở dữ liệu từ những yêu cầu của controller. Model xử lý và trả về kết quả dưới dạng một mảng dữ liệu, khi đó thông qua view ta sẽ đẩy nội dung của mảng dữ liệu ấy ra bên ngoài. Việc tách biệt tầng model có rất nhiều thuận lợi, trước là dễ quản lý sau là dễ nâng cấp và phát triển trong tương lai của mã nguồn.

Để tương tác được với Model thì trước tiên ta phải kết nối được với cơ sở dữ liệu. Vậy ta tạo 1 bảng user với các cú pháp như sau:
Tiếp tục ta kết nối với cơ sở dữ liệu bằng cách thêm vào file application.ini của chúng ta những đoạn lệnh sau:
Đoạn thông tin này khai báo cho hệ thống biết các tham số như host, user, pass, dbname.

Sau khi đã kết nối được với cơ sở dữ liệu, tiếp theo. Chúng ta sẽ tạo file User.php trong thư mục Model với nội dung như sau:
Qua đoạn lệnh trên ta hiểu phần nào về quy tắc định nghĩa một lớp model trong zend framework. Vì tất cả các file nằm trong thư mục Model nên áp dụng theo cơ chế lazy loading ta có quy tắc định nghĩa: Model_Tênfile. Cụ thể ở đây tôi tạo ra file User.php, nên lớp của tôi định nghĩa sẽ là Model_User.

Lưu ý là thư mục Models của chúng ta có s, nhưng khi định nghĩa thì chúng ta bỏ qua s và viết bình thường là Model.

Trong lớp Model_User ở trên, ta kế thừa lớp Zend_Db_Table_Abstract. Và khai báo tên bảng, tên khóa chính thông qua hai thuộc tính $_name và $_primary. Cuối cùng, ta định nghĩa phương thức listall() và dùng phương thức fetchall() để lấy toàn bộ dữ liệu vốn có trong bảng user.

Ở đây zend framework sử dụng cơ chế Active Record. Nên phương thức $this->fetchall() nó tương đương với cú pháp lặp toàn bộ dữ liệu từ câu truy vấn select * from user vậy.

Sau cùng, ta tạo lớp UserController trong file controllers/UserController.php với nội dung sau:
Lưu ý là ta phải tạo trong thư mục views/scripts/user/index.phtml để controller tìm kiếm thấy view khi được gọi. (xem bài tìm hiểu về view trong zend framework).

Để sử dụng được Model trong controller ta phải khởi tạo đối tượng từ lớp Model mà ta đã định nghĩa ở trên. Sau đó từ đối tượng ta lại gọi các phương thức muốn thực thi. Lệnh <pre> ở trên được dùng để trình bày dữ liệu dạng mảng.

Chạy thử nghiệm với đường dẫn: http://localhost/zfexam/user/

Kết quả sẽ thông báo lỗi:
 
Fatal error: Class 'Model_User' not found in C:\xampp\htdocs\zfexam\application\controllers\UserController.php on line 4
 
Hệ thống của chúng ta chưa hiểu được lớp Model_User. Vì thế ta cần phải định nghĩa như sau trong file bootstrap.php:
Như các bạn thấy đấy, ta đã thêm vào phương thức autoload để định nghĩa cho hệ thống biết được đường dẫn tới các lớp mà ta tạo trong Model và form sau này.

Chạy thử nghiệm lại với đường dẫn: http://localhost/zfexam/user/
Kết quả sẽ hiển thị danh sách user dưới dạng mảng như ta mong đợi.
 
Một số phương thức thường dùng trong lớp Zend_Db_Table

1- Thao tác liệt kê và nhận dữ liệu:

Để có thể thực hiện các thao tác liệt kê dữ liệu đầy đủ và chi tiết. Chúng ta cần sử dụng phương thức:
Và từ phương thức này, chúng ta sẽ gọi các thao tác khác liên quan như điều kiện, giới hạn, sắp xếp,…
+ Liệt kê dữ liệu theo cột:
+ Liệt kê dữ liệu với một điều kiện:
Cú pháp ở trên cho ta liệt kê dữ liệu với điều kiện cột bằng giá trị nào đó. Quy tắc trong zend framework đối với mệnh đề where là tên cột, rồi đến phép so sánh, rồi đến ký hiệu "?". Và sau cùng là mới là giá trị.

+ Sắp xếp dữ liệu theo cột thuộc tính
+Giới hạn dữ liệu hiển thị
+ Hiển thị tất cả thông tin:
Trường hợp hiển thị với các điều kiện ở phía trên thì ta truyền $query vào fetchall()
+ Hiển thị 1 dòng dữ liệu
Ví dụ đầy đủ về hiển thị dữ liệu:
2- Thao tác thêm, xóa, sửa dữ liệu:
 
+ Thêm dữ liệu:
Ví dụ:
+ Sửa dữ liệu:
Ví dụ:
Với $data của chúng ta là một mảng dữ liệu:
+ Xóa dữ liệu:
Ví dụ:
Kết thúc bài này, ta đã hiểu được cơ bản về cách thức sử dụng Model trong Zend Framework, đồng thời cũng nắm được phần nào về các phương thức phổ biến thường sử dụng trong ứng dụng. Trong bài kế tiếp, tôi sẽ hướng dẫn các bạn tìm hiểu về phương pháp tương tác với cơ sở dữ liệu trên lớp Zend_Db. Qua đó có sự tùy biến tốt hơn trong việc viết ứng dụng trên zend framework.
 

(Bùi Quốc Huy)
23305
Bạn vẫn chưa hiểu rõ vấn đề ?. Bạn vẫn còn nhiều điều thắc mắc ?. Bạn gặp lỗi khi thực hành mã lệnh trên ?. Hãy tham gia diễn đàn QHOnline.Info để nhận được sự giúp đỡ từ phía cộng đồng nhanh nhất. Đồng thời tải những tài liệu giá trị tại diễn đàn. Việc đăng ký là hoàn toàn miễn phí, hãy đăng ký ngay để chúng tôi giúp đỡ bạn nhé.

Ghi rõ nguồn từ website QHOnline.Info - Khi bạn phát hành lại thông tin từ website này

Ý kiến cho bài viết này.