W aplikacji Zend używam Zend\Db\TableGateway
i Zend\Db\Sql
do pobierania danych z bazy danych MySQL, jak poniżej.Ten wynik jest zbiorem wynikowym tylko do przodu, wywołanie rewind() po przeniesieniu do przodu nie jest obsługiwane - Zend
Model -
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 -
Właśnie iterate $ zestaw wierszy i echo w widoku. Ale daje błąd przy próbie echa dwa lub więcej razy. Działa pojedyncza iteracja.
Ten wynik jest do przodu tylko zestaw wyników, wzywając do tyłu() po naprzód nie jest obsługiwana
mogę go rozwiązać poprzez załadowanie go do innego tablicy w widoku. Ale czy to najlepszy sposób? Czy jest jakaś inna metoda radzenia sobie z tym?
$records = array();
foreach ($edu_qualifications as $result) {
$records[] = $result;
}
EDIT -
$resultSet->buffer();
rozwiązać ten problem.
Co o buforze()? – ChamingaD
z 'Zend \ \ Db ResultSet \ Resultset :: bufor()' każdorazowo 'Zend \ Db \ wynikowa \ resultSet :: prądu() jest wywoływana' bieżącego wiersza będą przechowywane w 'Zend \ \ Db ResultSet \ Resultset: : $ buffer' podczas przechodzenia przez zestaw. Ta pętla może być 'foreach()'.Tak więc na pierwszym 'foreach()' dane będą pochodzić z bazy danych, a na drugiej pętli będzie pochodzić z 'Zend \ Db \ ResultSet \ Resultset :: $ buffer'. Jeśli zamierzasz użyć 'Zend \ Db \ ResultSet \ Resultset :: buffer()' musisz wywołać go przed przejściem przez zestaw, ponieważ zestaw musi wiedzieć, że musi buforować. –
Kto zdecydował, że to dobry pomysł, że nie możesz dwukrotnie wykonać tego samego zestawu wyników? To tylko 10 poziomów opóźnionego. – stef