2010-04-24 74 views
1

嘿!我只想知道你們在zend框架中使用連接表的意見。Zend Framework關係與表選擇

當然,你可以通過定義referenceMap和dependentTables之類的東西,或者使用

setIntegrityCheck(false) 
一個數據庫內

選擇使用關係()。 setIntegrityCheck版本對我來說似乎有點骯髒,但其他版本並不適合大查詢和加入許多表格...

我是PHP開發人員,現在已經5年了,並且是新的zend框架,只想爲我的第一個項目找個方向。

謝謝!

回答

0

我個人使用它們到處都是。我通常會做的就是建立一個參考地圖,然後用getX()定義模型,調用該關係。

class Model_Content extends Zend_Db_Table_Row_Abstract 
{ 
    public function getComments($showInactive = false) 
    { 
     $select = $this->_table->select(); 
     if (!$showInactive) { 
      $select->where('comment_active = \'y\''); 
     } 
     return $this->findDependentRowset('Model_DbTable_Comment', null, $select); 
    } 
} 
0

好的方法......至於我可以看到,在ZF只有選擇()的事情得到一個行集,其中包括由2個或多個表中的數據,對不對?例如,我可以有一個用戶,這個用戶有一個圖像和一個帳戶。兩者都在單獨的表格中。

當我使用findDependentRowset,有沒有辦法得到這樣的結果:

用戶名=>湯姆
的ImagePath => /images/tom.jpg
ACCOUNTTYPE =>免費

在一個對象內,對嗎?或者我錯過了什麼?謝謝你的幫助!!

0

就我個人而言,我使用setIntegrityCheck(false)無處不在。是的,它有點髒,但它是KISS,並且更容易編寫這樣的複雜連接查詢。

0

我也使用setIntegrityCheck(false),因爲像Richard已經說過的那樣,它是KISS,它是構建大型查詢的唯一選項。使用select()的另一個好處是,你可以將它回顯出來。

這樣你可以檢查你的工作,當你使用一個referenceMap這是不是太多容易...

0

的findDependentRowset/findParentRow方法都是公平和良好的,除非你正在執行查詢拉動大量的數據。根據以往的經驗,使用這些方法調用另一個數據庫查詢,即使它之前已經執行過,並且我已經在Web和數據庫服務器之間記錄了很多數據流量。在這種特殊情況下,應用程序需要轉換爲使用連接方法。

然而,findDependentRowset和findParentRow方法都有自己的優勢,讓你再從你的連接表回顧一下新一個Zend_Db_Table_Row對象相同的方法。

rtmilker:本findDependentRowset應該在這種情況下返回Zend_Db_Table_Rows數組這樣:

foreach($myTableAdapter->findDependentRowset('New_Table_Class', 'rule/[null]', $select) as $dependentRowObject){ 
    Zend_Debug::dump($dependentRowObject->toArray()); 
} 

的findParentRow方法顯然不需要foreach語句;與fetchRow()/ fetchAll()方法一樣的東西。