2011-09-14 134 views
0

我有一個模型「事件」(Zend_Db_Table_Abstract),它與其他模型有各種關係。通常我想我會做這樣的事情找到它和它的關係:找到(1234)包括關係

$events = new Events(); 
$event = $events->find($id)->current(); 
$eventsRelationship1 = $event->findDependentRowset('Relationship1'); 

由於工作的關係已經建立,我想知道是否有任何形式的自動聯接提供什麼。每次我拿到我的活動,我都需要擁有所有的關係。目前我看到只有兩種方法可以實現這一點:

  1. 自己構建查詢,硬編碼。不要這樣,因爲它正在解決已經建立的關係和「模型方法的便利性」。
  2. 使用單個查詢獲取每個相關對象。這個也很醜陋,因爲我不得不觸發太多的查詢。

當考慮獲取一組多行時,這甚至更進一步。對於單個事件,我可能會多次查詢數據庫,但是當獲取100行聯接時只是基本的。

那麼,有沒有人知道通過使用這些關係來創建連接的方法,或者除了硬編碼查詢之外沒有別的辦法嗎?

在此先感謝

阿恩

回答

1

解決這個難題的辦法就是「升級」使用dataMapper模式的數據庫訪問。

你基本上是在應用程序中的模型和db中的表示之間添加一個額外的層。這個映射器層允許您從不同的表中讀取/寫入數據 - 而不是一個模型和一個表之間的直接鏈接。

這裏是一個good tutorial要關注。 (有些東西你可以跳過 - 我只用我的代碼就把所有的getter和setter都遺漏了)。

當您剛剛使用Zend_Db_Table_Abstract時,需要一點時間才能讓您的頭部環繞它的工作方式,但它是值得的。

+0

http://www.survivethedeepend.com/zendframeworkbook/en/1.0/implementing.the.domain.model.entries.and.authors是另一個好讀物。順便說一句,這種模式允許你在同一模型中使用不同的源代碼(比如我使用數據庫後端和tex-backend作爲內容,而前端/控制器沒有任何區別:) – Fge