Zend Framework 2 Db\Adapter\Adapter-Abfrage resultset wie ZF1

Brauchen nur eine hand, die das Verständnis einige einfache Datenbank-Abfragen in ZF2. In ZF1 habe ich einfache Methoden, wie diese:

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, wie würde ich das gleiche tun? Ich habe Folgendes versucht, aber dies nur gibt, was aussieht wie ein "Result" - Objekt, aber alles was ich will ist ein array wie ZF1 hat mit fetchAll. Wenn ich die Iteration der Ergebnis-Objekt nur den array später, die müssen dann iteriert man immer wieder, es scheint nur, wie einige überschneidungen.

Anyway, hier ist was ich habe in ZF2 so weit:

//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 der Ausgabe bekomme ich dies:

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 
}

Jedoch, wenn ich $Ergebnisse zu $results->count(); ich sehe schon einen Datensatz. Wie bekomme ich die Daten zwar als ein array? (eine vollständige recordset)

Irgendwann sah ich etwas wie: $results->current()
Aber das nur wieder ein einzelner Datensatz.

Nur eine Randnotiz. Ich sehe alle Tabellen-abstrakte Klassen, die ich verwenden könnte, aber an diesem Punkt in meinem lernen, ich will nicht, das zu tun. Ich will nur einige einfache on-demand-Abfragen, Rückgabe-arrays, wie im ZF1. In ZF2, es scheint viel zu viel "Verdrahtung" der Dinge in configs und Sachen, die nur scheinen, wie overkill. Aber, wie ein Rahmen, ich mag die Flexibilität und die wichtigsten app-ich arbeite in ZF1 konnte wirklich profitieren von der Modularität der ZF2. (sonst würde ich wahrscheinlich gehen mit anderen Rahmen)

Bitte verzeihen Sie meine Unwissenheit, und danke sehr für jede Hilfe!!!

  • Sieht aus wie es genau widerspiegelt native PDO haben Sie sich für eine Methode wie fetchAll auf Zend\Db\Adapter\Driver\Pdo\Result? Andernfalls müssen Sie eine Schleife über die $result wie würden Sie mit einem ausgeführt PDOStatement glaube ich.
  • Ja, ich sah die Doku: [link]framework.zend.com/apidoc/2.0/classes/..., Aber Ihr zeigt nur 1 Methode die Rückgabe ein array, das ist "current()". Und, die gibt nur einen einzigen Datensatz. Schade, es gibt keine ->toArray () - Methode oder ähnliches. Ich kann nicht glauben, dass es nicht möglich ist, ein recordset zurückgeben, in ZF2 obwohl, ohne den Gebrauch Ihrer Abstraktion-Klassen.
  • Naja in der Regel auf dieser Ebene, die Sie nicht wollen, ein array... Sie möchten der aktuelle resultset wie mysqliresult resrouce, oder PDOStatement werden, weil Sie sich in einer Schleife durch. Nutzung von fetchAll ist in der Regel nicht eine gute Gewohnheit, wenn es ca seien Sie bequem in einigen Fällen. Sie können sich wahrscheinlich tun $result->getResource()->fetchAll(PDO::FETCH_ASSOC) zu umgehen. Obwohl insgesamt die id nicht empfehlen Zend_Db entweder in 2.x oder 1.x... Anstelle der id gehen Sie mit der Lehre - DBAL wenn Sie nur wollen, Abstraktion oder die komplette ORM-wenn Sie möchten, dass.
InformationsquelleAutor gregthegeek | 2013-01-01
Schreibe einen Kommentar