2011-01-31 78 views
4

我有一個名爲forums與後續的場結構表:主義態關聯

  1. OBJECT_TYPE - > [組|頁面|錦標賽| etc ..](可能值,每個元素都有自己的表格)

  2. object_id - > [group's id |頁面的ID |錦標賽ID |等等。(ID OBJECT_TYPE)

  3. id_forum,4.name等

然後,我有以下表格:GroupPageTournament等。

是它這可能與教條實現嗎?

回答

0

我有一個類似的問題。我已經發布了一個關於如何在this post的Doctrine 2.2中實現多態關聯的完整示例。

7

這應該是一個評論,但我的聲譽太低,對不起。

不幸的是,多態關聯與CTI(類表繼承)不完全相同:CTI要求所有子類具有相同標識的父表。

CTI可能在大多數情況下工作,但如果您想在已有自己的ID和/或可能具有不同ID類型的現有實體之間創建多態關聯,則可能會出現問題。

除了CTI需要在父表中爲每個子類創建一個對多態關聯無用的記錄。多態關聯不應該要求任何表,它應該只用(id,type)條件連接現有的表。爲了簡單/性能的原因,我認爲Doctrine需要父表。

當CTI不是解決方案時,我建議模擬Repository級別的多態關聯,即創建一個具有$ type屬性的抽象Repository,並實現一個可以自動將當前查詢連接到目標表的polymorphicJoin方法id /類型條件。然後用您的子類Repositories擴展抽象的Repository,並在find/select方法需要時調用polymorphicJoin方法。

如果這種關聯是在教義中實現的,那將是非常棒的。