Basta una semplice comprensione di alcune semplici query di database in ZF2. In ZF1 ho metodi semplici come questo:Zend Framework 2 Db Adapter Adapter set di risultati della query come 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;
}
In ZF2, come dovrei fare lo stesso? Ho provato quanto segue, ma questo restituisce solo quello che sembra un oggetto "Risultato", ma tutto quello che voglio è un array come ZF1 fatto con fetchAll. Se devo iterare l'oggetto risultato solo per fornire l'array in un secondo momento, che poi deve essere ripetuto più volte, sembra solo una duplicazione dello sforzo.
Comunque, ecco quello che ho in ZF2 finora:
//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;
}
In uscita, ottengo questo:
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
}
Tuttavia, se cambio $ risultati per $results->count();
io anzi vedo un conteggio record. Come faccio ad arrivare ai dati come array? (un recordset completo)
A un certo punto ho visto qualcosa di simile: $results->current()
Ma questo ha restituito solo un singolo record.
Solo una nota a margine. Vedo tutte le classi astratte della tabella che potrei usare, ma a questo punto del mio apprendimento, non voglio farlo. Voglio solo alcune semplici query su richiesta che restituiscano array come hanno fatto in ZF1. In ZF2, sembra esserci troppa "connessione" di cose in configurazioni e cose che sembrano eccessive. Ma, come framework, mi piace la flessibilità e l'app principale su cui sto lavorando in ZF1 potrebbe davvero beneficiare della modularità di ZF2. (altrimenti probabilmente andrei con altri framework)
Per favore perdonami la mia ignoranza, e grazie mille per qualsiasi aiuto!
Lo come se fosse simile al mirror nativo di 'PDO', hai cercato un metodo come' fetchAll' su 'Zend \ Db \ Adapter \ Driver \ Pdo \ Result'? Altrimenti è necessario eseguire il ciclo su '$ result' come si farebbe con un PDOStatement eseguito, credo. – prodigitalson
Sì, ho guardato i documenti: [link] http://framework.zend.com/apidoc/2.0/classes/Zend.Db.Adapter.Driver.Pdo.Result.html [/ link] Ma è solo mostrando 1 metodo che restituisce un array, che è "current()". E questo restituisce solo un singolo record. Peccato che non ci sia il metodo -> toArray() o simile. Non posso credere che non ci sia un modo per restituire un recordset in ZF2, senza l'uso delle loro classi di astrazione. – gregthegeek
In genere a questo livello non vuoi un array ...vuoi il risultato effettivo come la risincronizzazione di mysqliresult o il PDOStatement perché lo stai scorrendo in loop. usare fetchAll di solito non è una buona abitudine anche se può essere conveniente in alcuni casi. probabilmente puoi fare '$ result-> getResource() -> fetchAll (PDO :: FETCH_ASSOC)' per aggirarlo. Anche se l'ID generale non consiglia mai Zend_Db in 2.x o 1.x ... Invece id va con Doctrine - DBAL se vuoi solo l'astrazione o l'ORM completo se lo vuoi. – prodigitalson