我是Zend Framework 2的新手。我成功完成了ZF2的Album教程。现在我想只显示数据库中多个表中的某些数据。我有一个简单的数据库设置与表,例如,人,书籍,状态..等等。数据库应该做什么并不重要。我想知道的是,如果有一个教程会向我展示显示表连接数据的分步指导。我已经看到代码片段展示了如何进行连接,但是我还没有找到关于设置类的教程,以及如何配置Module.php。换句话说,相册中的模块在getServiceConfig()中有一个硬编码的表名。但我如何设置它,以便知道我正在从多个表中请求数据。另外,如果我想设置关系,还是像在Album教程中那样为数据库表创建类,还是会有些不同。你能帮忙,还是告诉我正确的道路?如果你知道解释处理多个表的任何教程,那就太好了。Zend Framework 2的多个表格
7
A
回答
5
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
}
的join()
方法用于执行album
和artist
表之间的连接。我们还使用columns()
来选择返回哪些列。在这种情况下,我为艺术家表格中的name
列创建名为a_name
的别名。
一旦设置了Select
对象,则剩下的就是标准的Db
代码,它将返回一个包含数据的ResultSet
对象。
4
只是为了扩大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);
}
你也应该看看保湿效果将直接从ResultSet中建立自己的对象为您提供:
http://framework.zend.com/manual/2.0/en/modules/zend.db.result-set.html
0
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,表格
- 2. Zend Framework 2多个模块
- 3. Zend Framework vs Zend Framework 2
- 4. 输入过滤器Zend Framework 2中的多表格形式?
- 5. Zend Framework 2 - 注释表单 - 多个表单在一个视图
- 6. Zend Framework 2得到多个行
- 7. Zend Framework 2多个数据库
- 8. Zend 2 Framework中的多对多关系
- 9. Zend Framework 2 - 提交表单
- 10. Zend Framework 2:Zend_Navigation
- 11. Zend Framework 2 LDAP
- 12. Zend Framework 2 logoutAction
- 13. 从Zend Framework中获取2个或更多相关表格的值
- 14. 从Zend Framework迁移到Zend Framework 2 1
- 15. 在Zend Framework中选择两个表格2
- 16. 可以TableGateway使用多个表Zend Framework 2
- 17. Zend Framework多表查询
- 18. Zend Framework 2标题
- 19. ZfcUser和Zend Framework 2
- 20. Zend Framework 2 REST API
- 21. Zend Framework多个数据库
- 22. 处理Zend Framework中的依赖关系2表格
- 23. Zend Framework的错误2
- 24. 产生的Zend Framework 2
- 25. 邮件Zend Framework 2的三个问题
- 26. Zend Framework 2 InputFilter和表单域
- 27. Zend Framework 2 tableGateway模式工作流程与其他表格
- 28. Zend Framework 2设置Zend \ InputFilter setRequired()
- 29. Zend Framework 2 - 更新Zend导致RuntimeException
- 30. Zend Framework 2 CSRF验证
感谢罗布。我会给它一个镜头。同时,你是否知道任何使用Zend \ Db的工作教程。由于我是Zend新手,需要一段时间才能完全理解。如果我可以看到他们使用Zend \ Db检索数据并显示它们的教程,这将非常有帮助。尽管如此,谢谢你的帮助。 – user1828605 2013-02-20 18:11:19
罗布,夫妇的事情仍然不清楚。我是否为每个表创建类?我在Module.php中做什么?我现在在Module中有公共函数getServiceConfig(),如Album tutorial所示。我明白你上面显示的内容,但是我目前的问题是我不知道如何开始与数据库交谈。教程将非常有帮助。谢谢 – user1828605 2013-02-21 20:51:10
我为每个逻辑实体创建类 - 通常映射到表中的一行,但并不总是(有时映射器总是加入)。我会尝试在Github上解决一些代码。 – 2013-02-25 23:02:39