Po prostu potrzebuję strony zrozumienie prostych zapytań do bazy danych w ZF2. W ZF1 mam proste metody takie jak to:Zend Framework 2 Db Adapter Zestaw zapytań do adaptera, taki jak ZF1
public function recordset()
{
// listing of all records
$db = Zend_Registry::get('db');
$sql = "SELECT " . $this->_selectlist() .
" from customer c";
$r = $db->fetchAll($sql);
return $r;
}
W ZF2, jak mam zrobić to samo? Próbowałem następujące, ale po prostu zwraca to, co wygląda jak obiekt "Wynik", ale wszystko, czego chcę, to tablica taka jak ZF1 zrobione z fetchAll. Jeśli muszę iterować obiekt wynikowy tylko po to, aby później dostarczyć tablicę, która następnie musi zostać powtórzona, wydaje się, że jest to tylko powielenie wysiłku.
W każdym razie, oto co mam w ZF2 tej pory:
//above the controller start I have: use Zend\Db\Adapter\Adapter as DbAdapter;
public function blaAction()
{
$db = new DbAdapter(
array(
'driver' => 'Pdo',
'dsn' => 'mysql:dbname=mydb;host=localhost',
'username' => 'root',
'password' => '',
)
);
$sql = 'select * from customer';
$stmt = $db->query($sql);
$results = $stmt->execute();
$this->view->data = $results;
return $this->view;
}
W wyjściu, otrzymuję ten:
object(Zend\Db\Adapter\Driver\Pdo\Result)#197 (8) {
["statementMode":protected]=> string(7) "forward" ["resource":protected]=> object(PDOStatement)#195 (1) {
["queryString"]=> string(22) "select * from customer"
} ["options":protected]=> NULL ["currentComplete":protected]=> bool(false) ["currentData":protected]=> NULL ["position":protected]=> int(-1) ["generatedValue":protected]=> string(1) "0" ["rowCount":protected]=> NULL
}
Jednak jeśli zmienię $ wyniki do $results->count();
I rzeczywiście widzę liczba rekordów. Jak mogę dostać się do danych jako tablicy? (pełny zestaw rekordów)
W pewnym momencie zobaczyłem coś takiego: $results->current()
Ale to tylko zwróciło pojedynczy rekord.
Tylko notatkę. Widzę wszystkie abstrakcyjne tabele, z których mógłbym skorzystać, ale w tym momencie mojej nauki nie chcę tego robić. Chcę tylko kilka prostych zapytań na żądanie, które zwracają tablice, tak jak w ZF1. W ZF2 wydaje się, że jest zbyt dużo "łączenia" rzeczy w konfiguracje i rzeczy, które wydają się być przesadą. Ale jako struktura podoba mi się elastyczność, a główna aplikacja, nad którą pracuję w ZF1, może naprawdę skorzystać z modułowości ZF2. (w przeciwnym razie prawdopodobnie pójdę z innym szkieletem)
Proszę wybaczyć mojej niewiedzy i bardzo dziękuję za pomoc!
Lo oks jak to jest bliższe natywnego 'PDO' czy szukałeś metody' 'fetchAll' na' Zend \ Db \ Adapter \ Driver \ Pdo \ Result'? W przeciwnym razie musisz pętli nad '$ result', jak gdybyś z wykonanym PDOStatement wierzę. – prodigitalson
Tak, obejrzałem dokumenty: [link] http://framework.zend.com/apidoc/2.0/classes/Zend.Db.Adapter.Driver.Pdo.Result.html [/ link] Ale to jedyne pokazano 1 metodę zwracającą tablicę, która jest "current()". A to tylko zwraca pojedynczy rekord. Szkoda, że nie ma metody -> toArray() lub podobnej. Nie mogę uwierzyć, że nie ma sposobu na zwrócenie zestawu rekordów w ZF2, bez użycia klas abstrakcji. – gregthegeek
Na tym poziomie zwykle nie chcesz tablicy ...chcesz rzeczywisty zestaw wyników, jak mysqliresult resrouce, lub PDOStatement, ponieważ będziesz go przepuszczać. używanie fetchAll zazwyczaj nie jest dobrym nawykiem, chociaż w niektórych przypadkach może być wygodne. prawdopodobnie możesz zrobić '$ result-> getResource() -> fetchAll (PDO :: FETCH_ASSOC)' aby ominąć to. Chociaż ogólny id nigdy nie zaleca Zend_Db ani w 2.x ani 1.x ... Zamiast id idą z Doctrine - DBAL, jeśli tylko chcesz abstrakcji lub pełnej ORM, jeśli chcesz. – prodigitalson