Ich bin neu in Zend Framework 2. Ich habe das Album-Tutorial für ZF2 erfolgreich abgeschlossen. Jetzt möchte ich nur bestimmte Daten aus mehreren Tabellen in der Datenbank anzeigen. Ich habe eine einfache Datenbank-Setup mit Tabellen, z. B. Person, Bücher, Status .. etc. Es ist wirklich nicht wichtig, was die Datenbank tun soll. Was ich gerne wissen würde, ist, wenn es ein Tutorial gibt, das mir Schritt-für-Schritt-Anleitungen zeigt, um Daten von Tabellen-Joins anzuzeigen. Ich habe Codeschnipsel gesehen, die zeigen, wie Joins zu machen sind, aber ich habe keine Tutorials zum Einrichten der Klassen und zum Konfigurieren von Module.php gefunden. Mit anderen Worten, das Modul in Album hat einen Tabellennamen, der in getServiceConfig() fest codiert ist. Aber wie richte ich es so ein, dass es weiß, dass ich Daten von mehreren Tabellen anfordere. Wenn ich die Beziehung einrichten möchte, erzeuge ich immer noch eine Klasse für Datenbanktabellen, wie im Lernprogramm für Alben, oder wird es etwas anderes sein. Kannst du mir bitte helfen oder mir den richtigen Weg zeigen? Wenn Sie ein Tutorial kennen, das den Umgang mit mehreren Tabellen erklärt, wäre das großartig.mehrere Tabellen für Zend Framework 2
Antwort
Das Ablums-Lernprogramm verwendet Zend\Db\TableGateway
, das das Verbinden mit mehreren Tabellen nicht unterstützt.
Sie müssen Zend\Db
direkt oder über eine Mapper-Klasse wie AbstractDbMapper
innerhalb des ZfcBase-Moduls verwenden.
Die grundlegende Verwendung sieht wie folgt aus:
<?php
// Given that $dbAdapter is an instance of Zend\Db\Adapter\Adapter
use Zend\Db\Sql\Select();
use Zend\Db\ResultSet\ResultSet();
$select = new Select();
$select->from('album')
->columns(array('album.*', 'a_name' => 'artist.name'))
->join('artist', 'album.artist_id' = 'artist.id');
$statement = $dbAdapter->createStatement();
$select->prepareStatement($dbAdapter, $statement);
$driverResult = $statment->execute();
$resultset = new ResultSet();
$resultset->initialize($driverResult); // can use setDataSource() for older ZF2 versions.
foreach ($resultset as $row) {
// $row is an ArrayObject
}
Die join()
Methode der Verbindung zwischen dem album
und artist
Tabelle auszuführen verwendet wird. Wir verwenden auch columns()
, um auszuwählen, welche Spalten zurückgegeben werden. In diesem Fall erstelle ich einen Alias namens a_name
für die Spalte name
in der artist-Tabelle.
Sobald das Objekt Select
eingerichtet ist, ist der Rest der Standardcode Db
, der ein ResultSet
Objekt für Sie zurückgibt, das die Daten enthält.
Nur um Robs ausgezeichnete Antwort zu erweitern, ist es einfach, einen Schritt weiter zu gehen und mehrere Objekte zu bevölkern, um die gewünschte Beziehung zu bilden.
<?php
// Given that $dbAdapter is an instance of Zend\Db\Adapter\Adapter
use Zend\Db\Sql\Select();
use Zend\Db\ResultSet\ResultSet();
$select = new Select();
$select->from('album')
->columns(array('album.*', 'artist.*'))
->join('artist', 'album.artist_id' = 'artist.artist_id');
$statement = $dbAdapter->createStatement();
$select->prepareStatement($dbAdapter, $statement);
$driverResult = $statement->execute(); // execute statement to get result
$resultset = new ResultSet();
$resultset->setDataSource($driverResult);
$albumHydrator = new AlbumHydrator;
$artistHydrator = new ArtistHydrator;
foreach($resultset as $row) { // $row is an ArrayObject
$album = $albumHydrator->hydrate($row);
$artist = $artistHydrator->hydrate($row);
$album->setArtist($artist);
}
Sie auch auf feuchtigkeitsspendende Ergebnis aussehen soll setzt Ihre Objekte für Sie direkt aus dem ResultSet zu bauen:
http://framework.zend.com/manual/2.0/en/modules/zend.db.result-set.html
use Zend\Db\Sql\Select;
$select = new Select();
// or, to produce a $select bound to a specific table
// $select = new Select('foo');
$select->join(
'foo' // table name,
'id = bar.id', // expression to join on (will be quoted by platform object before insertion),
array('bar', 'baz'), // (optional) list of columns, same requiremetns as columns() above
$select::JOIN_OUTER // (optional), one of inner, outer, left, right also represtned by constants in the API
);
$select->from(array('f' => 'foo')) // base table
->join(array('b' => 'bar'), // join table with alias
'f.foo_id = b.foo_id'); // join expression
- 1. Zend Framework 2 für ein Zend Framework Neuling
- 2. zend framework 2 AuthenticationService
- 3. Zend Framework 2: Subqueries
- 4. Zend Framework 2 LDAP
- 5. Zend Framework 2 - Datenbankverbindung
- 6. Zend Framework 2 Redirect
- 7. zend Framework 2 Konstanten
- 8. Zend Framework 2 Benutzerdefinierte Validatoren für Formulare
- 9. Zend Framework 2 Suche Lucene?
- 10. Zend Framework 2 - Cookie-Konzept
- 11. Authentifizierung in zend Framework 2
- 12. Zend Framework 2: aktive Menüpunkte
- 13. zend framework 2 + phpunit + mehrere Module + kontinuierliche Integration
- 14. Zend Framework 2 Session Lebensdauer
- 15. Zend Framework 2: SQL-Unterabfrage
- 16. DataGrid für Zend Framework
- 17. Zend Framework 2 reale Welt Anwendung Dateistruktur
- 18. Zend Framework 2 Variable an Modelle übergeben
- 19. Zend Framework mit modularem Aufbau + Doctrine 2
- 20. Zend Framework 2 und SELECT COUNT (*) Abfrage
- 21. Zend Framework 2 - PDF - Last pdf-Vorlage
- 22. Erstellen von Benachrichtigungen mit Zend Framework 2
- 23. Zend Framework 2 empfohlene Methode zur Fehlerbehandlung
- 24. Zend Framework 2 Navigation Sub-Sub-Menü
- 25. Service Locator in Zend Framework 2
- 26. Zend Framework 2 Navigationsmenü Twitter Bootstrap Integration
- 27. Wie verschieden in Zend Framework 2 benutzen?
- 28. Zend Framework 2 Modulname Routing-Problem
- 29. Zend Framework 2 zurückgegebene Objekt als Abfrageergebnis
- 30. dompdf funktioniert nicht in zend framework 2
Dank Rob. Ich versuche es mal. Inzwischen kennen Sie irgendwelche Arbeit Tutorien, die Zend \ Db verwendet. Da ich neu bei Zend bin, brauche ich eine Weile, um es zu verstehen. Es wird sehr hilfreich sein, wenn ich das Tutorial sehen kann, in dem sie Zend \ Db verwendet haben, um Daten abzurufen und anzuzeigen. Trotzdem, danke für Ihre Hilfe. – user1828605
Rob, paar Dinge noch nicht klar für mich. Erstelle ich Klassen für jede Tabelle, die ich habe? Was mache ich in Module.php? Ich habe zur Zeit die öffentliche Funktion getServiceConfig() in Module, wie im Album Tutorial gezeigt. Ich verstehe, was Sie oben gezeigt haben, aber mein derzeitiges Problem ist, dass ich nicht weiß, wie ich anfangen soll, mit der Datenbank zu sprechen. Ein Tutorial wäre sehr hilfreich. Danke – user1828605
Ich erstelle Klassen für jede logische Entität - die normalerweise einer Zeile in einer Tabelle zugeordnet wird, aber nicht immer (manchmal verbindet der Mapper immer). Ich werde versuchen, Code auf Github zu sortieren. –