我是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中的多頁表單2
- 4. Zend Framework vs Zend Framework 2
- 5. Zend Framework 2 DateSelect/MonthSelect格式
- 6. 輸入過濾器Zend Framework 2中的多表格形式?
- 7. Zend Framework 2 - 註釋表單 - 多個表單在一個視圖
- 8. Zend Framework 2多個數據庫
- 9. Zend Framework 2得到多個行
- 10. Zend Framework的Zend Framework 2教程新手
- 11. Zend 2 Framework中的多對多關係
- 12. Zend Framework 2 - 表單翻譯
- 13. Zend Framework 2 - 提交表單
- 14. Zend框架2 - 多頁表格
- 15. Zend Framework多重播放表格
- 16. Zend Framework 2 LDAP
- 17. Zend Framework 2 Db2
- 18. Zend Framework 2 debug_backtrace()
- 19. Zend Framework 2 Htaccess
- 20. Zend Framework 2:Zend_Navigation
- 21. Zend Framework 2
- 22. Zend Framework 2 logoutAction
- 23. Zend Framework 2 Cronjob
- 24. Zend Framework 2 Behat
- 25. Zend Framework 2獨立Zend表單
- 26. 以Zend表格顯示異常錯誤信息 - Zend Framework 2
- 27. 從Zend Framework遷移到Zend Framework 2 1
- 28. 從Zend Framework中獲取2個或更多相關表格的值
- 29. Zend Framework 2 Zend/Log Logger
- 30. 在Zend Framework中選擇兩個表格2
感謝羅布。我會給它一個鏡頭。同時,你是否知道任何使用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