2016-03-02 94 views
1

我最近在我的web服務器上安裝了Doctrine2,並且所有的工作都很好。我已經建立了所有的實體,但現在我正在創建一個查找表,我有點困惑如何做到這一點。我希望有一個表,看起來像這樣:用Doctrine2創建查找表

tbl_Role      tbl_User 
+--------+----------+   +--------+----------+--------------+----------+ 
| id | Name |   | id | Name | Password | Role | 
+--------+----------+   +--------+----------+--------------+----------+ 
| 1 | Admin | 
| 2 | User | 
| 3 | Free | 
+--------+----------+ 

RoleUser表之間由一個一對多的關係(一個Role有許多Users),這表不會改變未來。我不想使用枚舉,因爲它們的更新或重新排序問題(如果有更改)

我現在的問題是我如何能夠將此查找表表示爲Doctrine實體?通常,如果我想創建一個新的User,我必須從DB獲取擬合Role,並將其設置爲User實體中的參考。這對我來說似乎有點貴。如果我只能在靜態PHP字段中輸入Role ID,那麼我可以將它們設置爲User的參考。這可能嗎?

另一個問題是我如何獲取查找值到數據庫中。我可以在Role表中創建Role表後執行一個方法嗎?這樣就可以將構造函數標記爲私有的,並且在遷移後所有值都存在。

+0

您知道Doctrine的參考嗎? https://github.com/doctrine/doctrine2/blob/2.2/lib/Doctrine/ORM/EntityManager.php#L374-413。給定角色的實際數據庫ID,獲取原則參考價格便宜。我仍然試圖將角色存儲爲一個字符串,並且根本就沒有Doctrine 2關係。如果您願意,您仍然可以製作其他軟件的角色表。 – Cerad

回答

1

首先,它不會太昂貴,因爲Doctrine2 has a few cache layers和這些查詢將被高效緩存,因爲Role表不會變化。

無論如何,如果Role表不會改變,我不確定它是否應該保存在數據庫中。您可以爲其創建一個「靜態」工廠服務,以創建簡單的值對象作爲您的域圖層的一部分。

+0

我想我明白你的意思,但我想在數據庫中有這張表。這是一個非常重要的關係,如果你只查看數據庫(沒有工廠),如果這個表不可用,就沒有引用這個integeres。這是一個設計理念,我不情願地打破它。 – Cilenco

+0

那麼,你應該設計你的軟件,而不是數據庫。 DB只是一個I/O。無論如何,正如答案中所提到的,由於Doctrine的緩存層,它不應該成爲問題。 –