Trong ứng dụng Zend, tôi sử dụng Zend\Db\TableGateway
và Zend\Db\Sql
để truy xuất dữ liệu từ cơ sở dữ liệu MySQL như dưới đây.Kết quả này là tập hợp chỉ chuyển tiếp, gọi rewind() sau khi di chuyển về phía trước không được hỗ trợ - Zend
Người mẫu -
public function getCandidateEduQualifications($id)
{
$id = (int) $id;
$rowset = $this->tableGateway->select(function (Sql\Select $select) use ($id)
{
$select->where
->AND->NEST->equalTo('candidate_id', $id)
->AND->equalTo('qualification_category', 'Educational');
});
return $rowset;
}
View -
Tôi chỉ lặp $ rowset và echo theo quan điểm. Nhưng nó cho lỗi khi cố gắng lặp lại hai hoặc nhiều lần. Lặp lại đơn hoạt động.
Kết quả này là một tiền đạo duy nhất tập hợp kết quả, gọi tua lại() sau khi tiến lên phía trước không được hỗ trợ
tôi có thể giải quyết nó bằng cách tải nó đến một mảng theo quan điểm. Nhưng đó có phải là cách tốt nhất không? Có cách nào khác để xử lý việc này không?
$records = array();
foreach ($edu_qualifications as $result) {
$records[] = $result;
}
EDIT -
$resultSet->buffer();
giải quyết vấn đề.
Điều gì về bộ đệm()? – ChamingaD
Với 'Zend \ Db \ ResultSet \ Resultset :: buffer()' mỗi lần 'Zend \ Db \ ResultSet \ Resultset :: current()' được gọi là hàng hiện tại sẽ được giữ trong 'Zend \ Db \ ResultSet \ Resultset: : $ buffer' khi bạn lặp qua tập hợp. Vòng lặp này có thể là một 'foreach()'.Vì vậy, cơ bản trên 'foreach() đầu tiên 'dữ liệu sẽ đến từ cơ sở dữ liệu của bạn và trên vòng lặp thứ hai nó sẽ đến từ' Zend \ Db \ ResultSet \ Resultset :: $ buffer'. Nếu bạn định sử dụng 'Zend \ Db \ ResultSet \ Resultset :: buffer()', bạn phải gọi nó trước khi bạn lặp lại thông qua tập hợp vì tập hợp phải biết nó cần phải đệm. –
Ai đã quyết định rằng bạn không thể lặp lại cùng một tập kết quả hai lần? Đây chỉ là 10 cấp độ chậm phát triển. – stef