Sono nuovo in Zend Framework 2. Ho completato con successo il tutorial Album per ZF2. Ora mi piacerebbe visualizzare solo alcuni dati da più tabelle nel database. Ho una semplice configurazione del database con tabelle, ad esempio, persona, libri, stato ... ecc. Non è davvero importante ciò che il database dovrebbe fare. Quello che vorrei sapere è se c'è un tutorial che mi mostrerà una guida passo passo per visualizzare i dati dai join della tabella. Ho visto frammenti di codici che mostrano come eseguire join, ma non ho trovato alcun tutorial sull'impostazione delle classi e su come configurare Module.php. In altre parole, il modulo in Album ha un nome di tabella codificato in getServiceConfig(). Ma come faccio a configurarlo in modo che sappia che sto richiedendo dati da più tabelle. Inoltre, se voglio impostare la relazione, creo ancora la classe per le tabelle del database come nell'esercitazione Album, o sarà qualcosa di diverso. Puoi aiutarmi, o mostrarmi la strada giusta? Se conosci qualche tutorial che spiega come gestire più tabelle, sarebbe fantastico.tabelle multiple per Zend Framework 2
risposta
Il tutorial di ablums utilizza Zend\Db\TableGateway
che non supporta l'unione a più tabelle.
È necessario utilizzare Zend\Db
direttamente o tramite una classe mapper, ad esempio AbstractDbMapper
all'interno del modulo ZfcBase.
L'uso di base è simile al seguente:
<?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
}
Il metodo join()
viene utilizzato per eseguire il join tra la tabella album
e artist
. Usiamo anche columns()
per selezionare quali colonne vengono restituite. In questo caso, creo un alias chiamato a_name
per la colonna name
all'interno della tabella artista.
volta che l'oggetto Select
è impostato, poi il resto è il codice standard Db
che restituirà un oggetto ResultSet
per te che contiene i dati.
Solo per espandere la risposta eccellente di Robs, è semplice fare un ulteriore passo avanti e popolare più oggetti per formare la relazione desiderata.
<?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);
}
Si dovrebbe anche guardare risultato idratante imposta per costruire gli oggetti per voi direttamente dal ResultSet:
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 per un framework Zend Newbie
- 2. zend framework 2 constants
- 3. Zend Framework 2 LDAP
- 4. zend framework 2 AuthenticationService
- 5. Zend Framework 2 Reindirizzamento
- 6. Zend Framework 2 - DI e dover inserire l'adattatore per tabelle nelle tabelle ... noioso?
- 7. OAuth in Zend Framework 2
- 8. Zend Framework 2 - Cookie Concept
- 9. Autenticazione in zend framework 2
- 10. Zend Framework 2: sql subquery
- 11. Zend Framework 2 passa variabile ai modelli
- 12. Zend Framework 2 DateSelect/MonthSeleziona formattazione
- 13. Durata della sessione Zend Framework 2
- 14. Estensione di ZfcUser con Zend Framework 2
- 15. Zend Framework 2: voci di menu attiva
- 16. Zend Framework 2 - BjyAuthorize nega sempre l'accesso
- 17. zend framework 2 aggiungi un nuovo controller
- 18. Zend Framework 2 - Aggiungi classe modulo
- 19. Servizio locator in Zend Framework 2
- 20. Zend Framework 2 - Connessione al database
- 21. Zend Framework 2 Part Route Assembly
- 22. Zend Framework 2: facciamolo o no?
- 23. Come utilizzare distinti in Zend Framework 2?
- 24. Zend Framework 2 - Layout e variabile
- 25. migrazioni di doctrine 2 + zend framework 2 = è possibile?
- 26. Differenze principali tra Zend Framework 2 e Symfony 2
- 27. Zend Framework 2: Disabilitazione automatica del layout per chiamate ajax
- 28. Zend framework 2 modo consigliato per la gestione degli errori
- 29. Utilizzare layout diversi per moduli diversi zend framework 2
- 30. Zend Framework 2 - Verifica globale per l'autenticazione con ZFCUser
Grazie Rob. Darò un colpo. Nel frattempo, conosci qualche tutorial di lavoro che usa Zend \ Db. Dato che sono nuovo di Zend, mi ci vorrà un po 'per capire appieno. Sarà estremamente utile se riesco a vedere il tutorial in cui hanno usato Zend \ Db per recuperare i dati e visualizzarli. Tuttavia, grazie per il tuo aiuto. – user1828605
Rob, un paio di cose non mi sono ancora chiare. Creo le classi per ogni tabella che ho? Cosa faccio in Module.php. Al momento ho la funzione pubblica getServiceConfig() nel modulo, come mostrato nell'esercitazione Album. Capisco cosa hai mostrato sopra, ma il mio problema attuale è che non so come iniziare a parlare con il database. Un tutorial sarebbe estremamente utile. Grazie – user1828605
Creo le classi per ogni entità logica, che di solito si associa a una riga in una tabella, ma non sempre (a volte il mappatore si unisce sempre). Cercherò di risolvere il codice su Github. –