在我的數據庫中,用戶管理分爲兩個表: - 由symfony sfDoctrineGuard插件(sfGuardUser)創建的一個表,由用戶名,密碼和其他信息插件 - 我創建了另一個用於擴展此表的更多屬性,如名,姓等...如何在同一個對象中合併兩個主義實體
我想要做的是將兩個表的所有屬性集中到同一個對象中顯示與特定頁面上任何成員相關的所有信息。
在爲此我做了一個連接兩個表是這樣的:
$q = $this->createQuery()
->from('sfGuardUser u')
->leftJoin('u.Mishmember m WITH u.id = ?', $rel['member_id']);
$member = $q->fetchOne();
我的問題是,生成的查詢似乎是正確的,因爲它選擇兩個表的所有屬性,但在$成員變量,我只能訪問sfGuardUser對象的屬性。
我希望$ member對象封裝兩個表/學說對象的所有屬性。
你會怎麼做?
EDIT1:如果我以前的代碼後做
print_r($member->toArray())
我得到包含在第一維sfGuardUser的所有屬性一個2維數組和我的第二個表的第二屬性尺寸。要清楚的print_r的結果是這樣的:
Array (
[table1-prop1] => value
[table1-prop2] => value
[table1-prop3] => value
[Table2] => Array (
[table2-prop1] => value
[table2-prop2] => value
[table2-prop3] => value
[table2-prop4] => value
)
)
因此,爲了例如訪問表2,prop3財產我必須做的: 是$ var [表2] [表2-prop3]。
這不是我想要的,因爲我要考慮所有的屬性部分的sameobjet或陣列(好像有隻有一個表。)
如果你在我身邊仍然上述數組應看起來像:
Array (
[table1-prop1] => value
[table1-prop2] => value
[table1-prop3] => value
[table2-prop1] => value
[table2-prop2] => value
[table2-prop3] => value
[table2-prop4] => value
)
)
希望能幫助理解我的問題。
EDIT2(答案DuoSRX和DrColossos)
謝謝兩位你的有趣的答案。
那麼,我寧願不在我的sfGuardUser中擁有Mishmember屬性的原因是兩個表/類都代表同一個實體(用戶)。雖然這種碎片在我的數據庫中是不可避免的(直接編輯sfGuardPlugin來添加我的屬性並不明智),但我希望應用程序的代碼就好像我有一張表一樣,因爲那樣會很多更合理和合理的使用(想象另一個不知道模型的開發人員將不得不在控制器或模板上工作......)
您認爲如何添加一個Doctrine類?從sfGuardUser繼承的用戶和Mishmember(PHP5中是否有多重繼承?),這樣我的控制器將只有一個用戶類來處理?
它將使更多的意義,我問任何用戶的所有屬性,無需費心去找出哪些表它們存儲。
我不知道它是如何繼承主義作品,但似乎最巧妙的解決方案,我(請告訴我,如果我錯了!)
我不知道我已經夠清楚,所以請不要猶豫,問任何事情。
謝謝,我只是通過編輯我的文章回答(編輯2) – 2010-07-02 13:54:03
我也編輯了我的答案:) – DuoSRX 2010-07-02 14:27:25
這似乎正是我正在尋找的,我預料會更加複雜。非常感謝! – 2010-07-02 21:15:20