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();
}
}