我是新来的Zend框架2.我成功地完成了专辑教程ZF2。 现在,我想只显示来自数据库中的多个表的某些数据。 我有一个简单的数据库设置了桌子,例如,人,书,status..etc。 这真的什么并不重要假设数据库的做。 如果有一个教程将告诉我一步一步的指导,从表连接到显示数据我想知道的是。 我所看到的显示怎么办加入代码的片段,但我还没有发现任何教程上设置类,以及如何配置Module.php。 换句话说,在相册中的模块有一个表名getServiceConfig硬编码()。 但我怎么设置它,所以它知道我是从多个表中请求数据。 另外,如果我想设置的关系,做我仍然创建数据库表类像相册教程,或者它会是不同的东西。 你能帮帮,或告诉我在正确的道路? 如果你知道,解释处理多个表中的任何教程,这将是巨大的。
Answer 1:
该ablums教程使用Zend\Db\TableGateway
不支持连接到多个表。
您需要使用Zend\Db
直接或通过映射类,如AbstractDbMapper
的ZfcBase模块内。
基本用法是这样的:
<?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
}
在join()
方法用于执行之间的联接album
和artist
表。 我们还使用columns()
来选择其中返回列。 在这种情况下,我创建一个名为别名a_name
的name
,艺术家表中的列。
一旦Select
对象设置了,那么剩下的就是标准Db
代码,将返回ResultSet
对象包含你的数据。
Answer 2:
只是为了在抢劫出色答卷扩大,其简单的把它更进一步,填充多个对象,形成您需要的关系。
<?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);
}
你也应该看看保湿效果将直接从ResultSet中建立自己的对象为您提供:
http://framework.zend.com/manual/2.0/en/modules/zend.db.result-set.html
Answer 3:
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
文章来源: multiple tables for Zend Framework 2
标签:
zend-framework2