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 commefetchAll
surZend\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.
Vous devez vous connecter pour publier un commentaire.
De http://framework.zend.com/manual/2.0/en/modules/zend.db.result-set.html:
De sorte que vous pouvez effectuer les opérations suivantes:
Maintenant, vous pouvez l'envoyer à la vue:
Ok, je pense que je l'ai. Au moins ce sera de faire le travail pour le moment. Fondamentalement, vous devez ajouter une étape supplémentaire et de les nourrir de l'objet de résultat dans un objet ResultSet qui a un toArray méthode de convenance. Je suppose que cela pourrait être fait des millions d'autres moyens, mais... cela fonctionne.
Gardez à l'esprit, je ne voudrais pas faire cela dans un contrôleur, ou même dans cette façon exacte, mais ce n'est qu'un test à ce point. Il y a des fois quand je veux cette disposition, et c'est de cette façon ZF2 peut le faire, si désiré. (ne jamais la garde de bonnes/mauvaises habitudes)
Dans le haut de la manette ajouter/utiliser le jeu de résultats:
Voici le travail de test de l'action:
toArray est juste faire une boucle foreach pour vous, donc, je suppose que c'est encore l'ajout de la matrice de boucles, je voulais éviter, mais ne pas avoir regardé ZF1 version de leur code, peut-être faire la même de toute façon.
Ce que je vais probablement faire est de créer un simple db classe wrapper pour Zend\Db qui remplace mon Zend_Registry déclaration de ZF1 et ajoute un fetchAll et fetchOne méthode, de cette façon, je peux rapidement port sur un tas de ZF1 code de ZF2 beaucoup plus facile.
Merci pour vos commentaires dans les commentaires, je l'apprécie. 🙂
Oh, je voulais aussi parler. Je suis tombé sur cette pont classe, quelqu'un a créé, ce qui pourrait également vous être utile:
https://github.com/fballiano/zfbridge
EDIT:
Si l'adaptateur de résultats retournés sont itérable il s'avère. Je ne suis pas sûr de ce que les étapes qui ont conduit à ma confusion, mais les résultats en $db->query sont retournés comme une Aop\objet de Résultat et qui peut être bouclé dans foreach assez facile. Ce foiré m'a le fait que si vous var_dump,ce n'est pas de montrer le tableau de données, il suffit de l'objet. Ce qui m'a conduit vers le bas un fait déroutant chemin.
Maintenant, même si les travaux ci-dessus, c'est mieux de l'OMI, parce qu'on peut prendre cet objet, et de l'envoyer là où nous voulons pour l'itération plus tard. (plutôt que d'une boucle sur l'ensemble de la chose pour créer un tableau tout d'abord, que l'itération à une autre boucle, perte de temps de cette façon)
Voici un exemple que j'aime le mieux. vous venez de boucle de l'objet, et il y a de vos données! duh! Pas sûr de savoir comment je m'ennuie de les choses simples parfois. 🙂
Après de longue recherche, j'ai haendel ma Requête SQL dans ZF2 de cette façon
Le truc, c'est la fonction PHP iterator_to_array
Vous pouvez éviter la boucle foreach en procédant comme suit:
Mon anglais est très pourri
J'ai aussi rencontré ce problème,$returnType Défini dans Zend\Db\ResultSet\ResultSet
nous pouvons donner un troisième argument pour Zend\Db\Adaptateur\Adaptateur,comme ce
maintenant,$s est la matrice de