Zend framework2 Zend Framework 2的多个表
我是Zend Framework 2的新手。我成功地完成了ZF2的专辑教程。现在我只想显示数据库中多个表中的特定数据。我有一个简单的数据库设置表,例如,人,书,状态等等。数据库应该做什么并不重要。我想知道的是,是否有一个教程可以逐步指导我显示来自表联接的数据。我看到了一些代码片段,展示了如何进行连接,但我还没有找到任何关于设置类以及如何配置Module.php的教程。换句话说,Album中的模块在getServiceConfig()中有一个表名硬编码。但我如何设置它,使它知道我正在从多个表请求数据。另外,如果我想设置关系,我是否仍然像在Album tutorial中那样为数据库表创建类,或者它是否会有所不同。你能帮忙吗,或者给我指一下正确的路?如果您知道任何解释如何处理多个表的教程,那就太好了。ablums教程使用的Zend framework2 Zend Framework 2的多个表,zend-framework2,Zend Framework2,我是Zend Framework 2的新手。我成功地完成了ZF2的专辑教程。现在我只想显示数据库中多个表中的特定数据。我有一个简单的数据库设置表,例如,人,书,状态等等。数据库应该做什么并不重要。我想知道的是,是否有一个教程可以逐步指导我显示来自表联接的数据。我看到了一些代码片段,展示了如何进行连接,但我还没有找到任何关于设置类以及如何配置Module.php的教程。换句话说,Album中的模块在getServiceConfig()中有一个表名硬编码。但我如何设置它,使它知道我正在从多个表请求数
Zend\Db\TableGateway
不支持连接到多个表
您需要直接或通过映射器类使用Zend\Db
,例如ZfcBase模块中的AbstractDbMapper
基本用法如下所示:
<?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
}
只需扩展Robs的优秀答案,再进一步填充多个对象以形成所需的关系就很简单了
<?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);
}
谢谢你,罗布。我要试一试。同时,您知道有任何使用Zend\Db的实用教程吗。由于我是Zend的新手,我需要一段时间才能完全理解。如果我能看到他们使用Zend\Db检索和显示数据的教程,那将非常有帮助。不过,谢谢你的帮助。罗布,有几件事我还不清楚。我是否为我拥有的每个表创建类?我在Module.php中做什么。我目前在模块中有公共函数getServiceConfig(),如相册教程所示。我确实理解你在上面展示的内容,但我目前的问题是我不知道如何开始与数据库对话。一个教程将非常有用。ThanksI为每个逻辑实体创建类-通常映射到表中的一行,但并不总是(有时映射程序总是连接)。我将尝试整理Github上的一些代码。在ZF2的更高版本中,没有setDataSource()这样的方法,而是使用initialize()。所以,上面的代码应该是:$resultset->initialize($driverResult);
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