Zend Framework 2 Db\Adaptateur\Carte de requête resultset comme ZF1

Juste besoin d'une main la compréhension de certains de simples requêtes de base de données dans ZF2. Dans ZF1 j'ai méthodes simples comme ceci:

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

Dans ZF2, comment pourrais-je faire de même? J'ai essayé ce qui suit, mais cela renvoie ce qui ressemble à un "Résultat" de l'objet, mais tout ce que je veux est un tableau comme ZF1 fait avec fetchAll. Si j'ai d'itérer l'objet de résultat uniquement pour fournir le tableau plus tard, qui doit ensuite être itéré de nouveau, il semble juste comme certains le chevauchement des efforts.

De toute façon, voici ce que j'ai dans ZF2 jusqu'à présent:

//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;
}

Dans la sortie, j'obtiens ceci:

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 
}

Cependant, si je change $résultats pour $results->count(); je ne fait voir un nombre d'enregistrements. Comment puis-je obtenir les données même si, comme un tableau? (un jeu d'enregistrements)

À un moment j'ai fait voir quelque chose comme: $results->current()
Mais qui ne retourne qu'un seul enregistrement.

Juste une note de côté. Je vois tout le tableau de classes abstraites que je pourrais utiliser, mais à ce point dans mon apprentissage, je ne veux pas le faire. Je veux juste une simple demande sur les requêtes qui retournent des tableaux comme ils l'ont fait dans ZF1. Dans ZF2, il semble être de trop de "câblage" de choses dans les configs et les choses qui semblent juste comme exagéré. Mais, en tant que cadre, j'aime la souplesse et la principale application que je suis en train de travailler au ZF1 pourrait vraiment bénéficier de la modularité de ZF2. (sinon, je serais probablement aller avec d'autres framework)

Veuillez pardonner mon ignorance, et merci beaucoup pour toute aide!

  • Ressemble de près miroirs natif PDO avez-vous recherchez une méthode comme fetchAll sur Zend\Db\Adapter\Driver\Pdo\Result? Sinon, il faut faire une boucle sur le $result comme vous le feriez avec un exécutée PDOStatement je crois.
  • Ouais, j'ai regardé les docs: [lien]framework.zend.com/apidoc/2.0/classes/... Mais sa n'en montrer que 1 méthode retournant un tableau, qui est en cours" ()". Et qui ne retourne qu'un seul enregistrement. Dommage qu'il n'y est pas ->méthode toArray() ou similaire. Je ne peux pas croire il n'y a pas un retour dans un jeu d'enregistrements dans ZF2 bien que, sans l'utilisation de leurs classes d'abstraction.
  • Bien généralement à ce niveau, vous ne voulez pas un tableau... vous voulez que le réel resultset comme mysqliresult resrouce, ou PDOStatement parce que vous serez en boucle à travers elle. utiliser fetchAll est généralement pas une bonne habitude que cela peut être pratique dans certains cas. vous pouvez probablement le faire $result->getResource()->fetchAll(PDO::FETCH_ASSOC) de les contourner. Si, globalement, l'id ne recommandons jamais Zend_Db 2.x ou 1.x... au Lieu de l'id aller avec la Doctrine DBAL si vous voulez juste de l'abstraction ou de la totalité de l'ORM si vous voulez.
InformationsquelleAutor gregthegeek | 2013-01-01