2015-01-10 28 views
0

我想表示文件在數據庫中並存儲元數據取決於它是音頻文件,視頻文件還是圖像文件。Doctrine2的類表繼承不完全專業化

處理這個問題的規範化方法是多個表,每個表只有特定文件類型所需的列。根/超類表將保存所有文件通用的信息(路徑,名稱,大小,日期等)。

問題: 除了上面列出的「categorizable」文件,總會有文件,我不會提供進一步的元數據。因此,所有需要進入數據庫的是root/superclass表中的條目。

讀了Doctrine 2 Documentation on Class Table Inheritance (CTI),我相信Doctrine2不會讓未進一步特殊的對象:

映射超不能是一個實體[..]

有沒有一種辦法完成這個?爲什麼不可能?

+0

#9750756#狀態,一個人將創建另一個子類沒有額外的屬性/ 9750756#9750756添加任何屬性。 Doctrine2然後會創建一個包含單個列的表:'id'。 – snwflk

回答

0

在這種情況下,我最終解決了Doctrine,因爲我想完成不僅不完全的專業化,而且還要實現多重繼承。

多重繼承:我想要一些文件是audio_file和video_file。

在一個學說的情況下,我想人們不得不指定每個可能的葉子組合作爲一個類。正如我的評論所述,即使是非專業化的案例也需要成爲一個與根類別不同的​​類別。

所以,我在做什麼是手動SQL查詢和自己建立對象。基本上,在這種情況下接管ORM的一部分。這使我能夠保持我原來的數據庫模式。