Liên hệ
zend framework

ResultSet trong Zend Framework

Sử dụng ResultSet biểu diễn tập hợp kết quả trả về của một query đến database và kỹ thuật sử dụng HydratingResultSet để chuyển các dòng kết quả thành đối tượng lớp

ResultSet

ResultSet (Zend\Db\ResultSet) là một thành phần trong Zend-db nói là đối tượng biểu diễn tập hợp các dòng kết quả trả về từ một truy vấn đến CSDL (các phần tử là đối tượng ArrayObject). Ví dụ như nó là kết quả khi thi hành phương thức query của Adapter database ... ResultSet kế thừa Traversable Countable và triên khai giao diện ResultSetInterface nên nó có một số phương thức, ứng xử mà bạn có thể hay dùng dưới đây.

  • valid() kiểm tra đối tượng hợp lệ (Iterator hợp lệ)
  • count() số phần tử (dòng)
  • toArray() lấy mảng phần tử
  • getFieldCount() số trường các phần tử biểu diễn (số cột)

Duyệt qua các phần tử của ResultSet

Ví dụ thi hành một câu lệnh SQL trả về ResultSet, sau đó lấy các dòng trong ResultSet

//$dbadapter là đối tượng Zend\Db\Adapter\Adapter
$stmt = $dbadapter->createStatement('SELECT * FROM Categories');
$stmt->prepare();
$result = $stmt->execute();

if ($result instanceof \Zend\Db\Adapter\Driver\ResultInterface) {
    foreach ($result as $row) {
        echo $row['CategoryName'] . '
'; } }

Kỹ thuật chuyển ResultSet thành HydratingResultSet

Bằng cách chuyển ResultSet thành HydratingResultSet thì khi duyệt kết quả dữ liệu dòng tự động chuyển thành đối tượng với thuộc tính thiết lập bởi dữ liệu dòng. Lưu ý đối tường cần có các phương thức setter/getter phù hợp với thuộc tính và tương ứng với tên trường dữ liệu

class Category {
    public $CategoryID;
    public $CategoryName;
    public $Description;

    public function getDescription()
    {
        return $this->Description;
    }

    public function setDescription($Description)
    {
        $this->Description = $Description;
    }
}

$stmt = $dbadapter->createStatement('SELECT * FROM Categories');
$stmt->prepare();
$result = $stmt->execute();


//$dbadapter là đối tượng Zend\Db\Adapter\Adapter
if ($result instanceof \Zend\Db\Adapter\Driver\ResultInterface) {
    //Khai báo và thiết lập Hydrate
    $resultSet = new \Zend\Db\ResultSet\HydratingResultSet(
        new \Zend\Hydrator\Reflection(), new Category()
    );
    $resultSet->initialize($result);

    foreach ($resultSet as $row) {
        //Mỗi $row giờ là đối tượng lớp Category
         echo $row->getDescription();
    }
}

Vui lòng đăng ký ủng hộ kênh