2012-09-06 54 views
1

我們正在考慮將我們的數據庫代碼在php中遷移到Doctrine2。在我們看來,我們希望做的大部分事情都可以通過Doctrine2來實現。只有一件事我們不確定是否可行,我們應該怎麼做。我們的數據庫模型現在無法更改,因爲另一個項目使用相同的數據庫。我們一次只能改變一件事。當然,我們也很好奇如何改進數據庫模型,但這不是我們主要關心的問題。將表格行中的數據映射到Doctrine2對象中的屬性

問題是這樣的。我們有一個包含這樣的基本產品信息的產品表:

[product_id | code   | name   | description    | price] 
4   AS84GD   Steel brush Strong steel brush.....  25.50 
28   HDD21N   Sand paper  Sand paper for wood.....  0.40 

我們有我們的產品不同的用戶,其人有不同的額外的產品性能。因此,我們有一個product_extra_field表,它看起來是這樣的:

[extra_field_id | name] 
3    weight 
4    color 
9    supplier 

,最後用額外的數據product_extra_field_data表

[product_id | extra_field_id | value] 
4   3    280 
4   4    brown 
4   9    company_x 
28   3    3 
28   4    yellow 
28   9    company_y 

我們如何正確的必要Doctrine2代碼在一個對象得到這個數據,所以我們可以有這樣的對象?

[Product] 
Id : 4 
Code : AS84GD 
Name : Steel brush 
Description : Strong steel brush..... 
Price : 25.50 
Weight : 280 
Color : brown 
Supplier : company_x 

我已經爲Hibernate添加了一個標籤,因爲我可以讀取(N)Hibernate代碼並將其轉化爲Doctrine2。

回答

0

到目前爲止,我不認爲你可以通過mapped superclasses來實現。

但是,你可以使用學說結果集映射中的原生SQL:

http://docs.doctrine-project.org/en/latest/reference/native-sql.html

這些都是缺點之一,當對象和關係數據之間的映射,我的意思是,如果你真的想只是一個實體而不是複製數據庫中的關係。

+0

我認爲你的意思是這個部分http://docs.doctrine-project.org/en/latest/reference/native-sql.html#named-native-query? Doctrine2是否根據SELECT語句生成INSERT,UPDATE和DELETE語句? –

+0

@munnik我從來沒有使用過這個,只有這個:http://docs.doctrine-project.org/en/latest/reference/native-sql.html#resultsetmappingbuilder爲了檢索對象,而不是更新/插入。但是,也許'命名本機查詢'可以處理,不知道,你必須測試它。讓我知道它是否有效。我很好奇。 –

0

您可以創建幾類: - 產品 - ExtraField - ExtraFieldValue

用下面的關係: 一個產品有很多ExtraFields(一對多關係),一個ExtraField有許多ExtraFieldValues(一對多關係),以及你的數據庫結構。

然後你來定製你的getter/setter方法得到的只有集合的第一個結果(如果事實上你的關係是一對一)...

不知道是不是我不夠明確。

+0

這很明顯,但不是我們想要的。我們不想'想'代碼中的不同表格。只有1個產品類應該有一個動態的屬性列表。 –

相關問題