Mô hình DAO cho một danh mục (Category) trong PHP hoạt động tương tự như mô hình DAO cho người dùng (User), nhưng thay vì làm việc với dữ liệu người dùng, bạn sẽ thao tác với các danh mục sản phẩm, bài viết, hoặc bất kỳ loại danh mục nào khác. Dưới đây là một ví dụ về cách triển khai mô hình DAO cho đối tượng Category
.
1. Cấu trúc thư mục
Giả sử chúng ta giữ nguyên cấu trúc thư mục như sau:
/project /config database.php /dao CategoryDAO.php /models Category.php /controllers CategoryController.php /views category_view.php index.php
2. Lớp mô hình (Category.php
)
Lớp này đại diện cho một đối tượng Category
.
<?php class Category { private $id; private $name; private $description; // Getter và Setter cho từng thuộc tính public function getId() { return $this->id; } public function setId($id) { $this->id = $id; } public function getName() { return $this->name; } public function setName($name) { $this->name = $name; } public function getDescription() { return $this->description; } public function setDescription($description) { $this->description = $description; } } ?>
3. Lớp DAO (CategoryDAO.php
)
Lớp này chịu trách nhiệm thao tác với cơ sở dữ liệu liên quan đến đối tượng Category
.
<?php require_once 'config/database.php'; require_once 'models/Category.php'; class CategoryDAO { private $conn; public function __construct() { $database = new Database(); $this->conn = $database->getConnection(); } public function getAllCategories() { $query = "SELECT id, name, description FROM categories"; $stmt = $this->conn->prepare($query); $stmt->execute(); $categories = []; while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { $category = new Category(); $category->setId($row['id']); $category->setName($row['name']); $category->setDescription($row['description']); $categories[] = $category; } return $categories; } public function getCategoryById($id) { $query = "SELECT id, name, description FROM categories WHERE id = ?"; $stmt = $this->conn->prepare($query); $stmt->bindParam(1, $id); $stmt->execute(); $row = $stmt->fetch(PDO::FETCH_ASSOC); $category = new Category(); $category->setId($row['id']); $category->setName($row['name']); $category->setDescription($row['description']); return $category; } public function createCategory($category) { $query = "INSERT INTO categories SET name=:name, description=:description"; $stmt = $this->conn->prepare($query); $stmt->bindParam(":name", $category->getName()); $stmt->bindParam(":description", $category->getDescription()); if($stmt->execute()) { return true; } return false; } public function updateCategory($category) { $query = "UPDATE categories SET name=:name, description=:description WHERE id=:id"; $stmt = $this->conn->prepare($query); $stmt->bindParam(":name", $category->getName()); $stmt->bindParam(":description", $category->getDescription()); $stmt->bindParam(":id", $category->getId()); if($stmt->execute()) { return true; } return false; } public function deleteCategory($id) { $query = "DELETE FROM categories WHERE id = ?"; $stmt = $this->conn->prepare($query); $stmt->bindParam(1, $id); if($stmt->execute()) { return true; } return false; } } ?>
4. Lớp điều khiển (CategoryController.php
)
Lớp này là cầu nối giữa mô hình Category
và DAO CategoryDAO
. Nó nhận yêu cầu từ người dùng, gọi DAO để lấy dữ liệu, và sau đó gửi dữ liệu đến view.
<?php require_once 'dao/CategoryDAO.php'; class CategoryController { private $categoryDAO; public function __construct() { $this->categoryDAO = new CategoryDAO(); } public function listCategories() { return $this->categoryDAO->getAllCategories(); } public function getCategory($id) { return $this->categoryDAO->getCategoryById($id); } public function createCategory($name, $description) { $category = new Category(); $category->setName($name); $category->setDescription($description); return $this->categoryDAO->createCategory($category); } public function updateCategory($id, $name, $description) { $category = new Category(); $category->setId($id); $category->setName($name); $category->setDescription($description); return $this->categoryDAO->updateCategory($category); } public function deleteCategory($id) { return $this->categoryDAO->deleteCategory($id); } } ?>
5. View (category_view.php
)
View hiển thị danh sách các danh mục và các thông tin chi tiết về từng danh mục.
<?php require_once 'controllers/CategoryController.php'; $categoryController = new CategoryController(); $categories = $categoryController->listCategories(); ?> <!DOCTYPE html> <html lang="vi"> <head> <meta charset="UTF-8"> <title>Danh sách danh mục</title> </head> <body> <h1>Danh sách danh mục</h1> <ul> <?php foreach ($categories as $category) { ?> <li><?php echo "ID: " . $category->getId() . " - Tên: " . $category->getName() . " - Mô tả: " . $category->getDescription(); ?></li> <?php } ?> </ul> </body> </html>
Tóm tắt mô hình DAO cho Category
:
- Model (
Category.php
): Đại diện cho dữ liệu của một danh mục và chứa các phương thức getter và setter để truy xuất và thay đổi thuộc tính. - DAO (
CategoryDAO.php
): Quản lý các truy vấn cơ sở dữ liệu liên quan đến danh mục, thực hiện các tác vụ như thêm, sửa, xóa, và lấy dữ liệu danh mục. - Controller (
CategoryController.php
): Xử lý logic nghiệp vụ, nhận yêu cầu từ người dùng và tương tác với DAO. - View (
category_view.php
): Hiển thị danh sách các danh mục và thông tin liên quan đến người dùng cuối.
Mô hình này giúp mã nguồn của bạn trở nên tổ chức hơn, dễ quản lý và dễ dàng mở rộng khi cần.