Je suis nouveau à Zend Framework 2. J'ai terminé avec succès le tutoriel de l'album pour ZF2. Je souhaite maintenant afficher uniquement une certaine données de plusieurs tables dans la base de données. J'ai une installation de base de données simple avec des tables, par exemple, personne, livres, statut..etc. Ce n'est vraiment pas important ce que la base de données est censée faire. Ce que j'aimerais savoir, c'est s'il y a un didacticiel qui me montrerait des directives étape par étape pour afficher les données des jointures de table. J'ai vu des extraits de codes montrant comment faire des jointures, mais je n'ai trouvé aucun didacticiel sur la configuration des classes et comment configurer le module.php. En d'autres termes, le module de l'album dispose d'un nom de table codé en dur à GetsViceconfig (). Mais comment puis-je le configurer pour qu'il sait que je demande des données à plusieurs tables? De plus, si je veux configurer la relation, puis-je créer toujours une classe pour des tables de base de données telles que dans le tutoriel de l'album, ou cela va-t-il être quelque chose de différent. Pouvez-vous s'il vous plaît aider ou me montrer le bon chemin? Si vous connaissez un tutoriel qui explique la manipulation de plusieurs tables, ce serait génial. P>
3 Réponses :
Le tutoriel ABLUMS utilise Vous devez utiliser L'utilisation de base ressemble à ceci: p> zend \ db \ tablegateway code> qui ne prend pas en charge la jointure à plusieurs tables.
zend \ db code> directement ou via un mappeur classe, telle que
abstractdbmapper code> dans le module ZFCBASE. p>
<?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
}
Merci rob. Je vais lui donner un coup. Pendant ce temps, connaissez-vous des tutoriels de travail qui utilisent Zend \ DB. Depuis que je suis nouveau à Zend, ça va m'emmener un moment pour bien comprendre. Il sera extrêmement utile que je puisse voir le tutoriel où ils ont utilisé Zend \ dB pour récupérer des données et les afficher. Néanmoins, merci de votre aide.
Rob, couple, les choses ne me sont toujours pas claires. Est-ce que je crée des cours pour chaque tables que j'ai? Que dois-je faire dans module.php. J'ai actuellement une fonction publique GETVICECONFIG () dans le module, comme indiqué dans le tutoriel de l'album. Je comprends ce que vous avez montré ci-dessus, mais mon problème actuel est que je ne sais pas comment commencer à parler à la base de données. Un tutoriel serait extrêmement utile. Merci
Je crée des cours pour chaque entité logique - qui mappe généralement à une rangée dans une table, mais pas toujours (parfois le mapper se joint toujours). Je vais essayer de régler un code sur Github.
Dans les versions ultérieures de ZF2, il n'y a pas de méthode SetdataSource (), utilise plutôt Initialize (). Ainsi, le code ci-dessus lirait: $ Restaurants-> Initialiser ($ Driverrresult);
Juste pour se développer sur robes excellente réponse, il est simple de prendre une étape plus loin et de remplir plusieurs objets pour former la relation que vous avez besoin.
<?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); }
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