Zend framework2 Zend Framework 2的多个表

Zend framework2 Zend Framework 2的多个表,zend-framework2,Zend Framework2,我是Zend Framework 2的新手。我成功地完成了ZF2的专辑教程。现在我只想显示数据库中多个表中的特定数据。我有一个简单的数据库设置表,例如,人,书,状态等等。数据库应该做什么并不重要。我想知道的是,是否有一个教程可以逐步指导我显示来自表联接的数据。我看到了一些代码片段,展示了如何进行连接,但我还没有找到任何关于设置类以及如何配置Module.php的教程。换句话说,Album中的模块在getServiceConfig()中有一个表名硬编码。但我如何设置它,使它知道我正在从多个表请求数

我是Zend Framework 2的新手。我成功地完成了ZF2的专辑教程。现在我只想显示数据库中多个表中的特定数据。我有一个简单的数据库设置表,例如,人,书,状态等等。数据库应该做什么并不重要。我想知道的是,是否有一个教程可以逐步指导我显示来自表联接的数据。我看到了一些代码片段,展示了如何进行连接,但我还没有找到任何关于设置类以及如何配置Module.php的教程。换句话说,Album中的模块在getServiceConfig()中有一个表名硬编码。但我如何设置它,使它知道我正在从多个表请求数据。另外,如果我想设置关系,我是否仍然像在Album tutorial中那样为数据库表创建类,或者它是否会有所不同。你能帮忙吗,或者给我指一下正确的路?如果您知道任何解释如何处理多个表的教程,那就太好了。

ablums教程使用的
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