2015-10-20 55 views
6

我想爲1個實體使用2個倉庫。symfony中的一個實體,兩個倉庫

原因是:我有2個捆綁包,兩個捆綁包使用相同的實體。我希望將這兩個功能分開。 有時我需要特定的查詢進入捆綁。

可以將一個存儲庫放入一個包中,另一個放入另一個存儲庫中? 也許這是一種錯誤的方式?

如果有人有想法。

Thx!

+0

如果使用相同的實體何不你想使用相同的類庫嗎? – scoolnico

+1

因爲它是兩個不同的功能 例如,如果我做一個汽車租賃網站,我有一個租賃套餐,有時我需要修理一些汽車 我有一個租賃套餐,另一個修理,我想分開租賃的查詢和修復的查詢 – lala

+0

因此,在您的回購中創建兩種方法。 – scoolnico

回答

2

我想打包兩個分開的存儲庫。將所有方法添加到一個存儲庫是沒有意義的,只是因爲共享實體。採用這種方法,每個存儲庫最終會有30個方法。

在DDD中,通過邏輯分離創建存儲庫(服務)是明智的。租車是一回事,維護是其他的事情等。

另外我也許會離開存儲庫,並轉移到臨時服務。 Model/Car/RepairManagerModel/Car/RentalManager或類似的東西。

+0

我的第一個想法是將兩個活動分開,因爲我覺得和你一樣,這是兩回事。 我曾嘗試創建兩個存儲庫,但在symfony中,當您使用ORM註釋@ORM \ Entity(repositoryClass =「」)時,我認爲您只能擁有一個存儲庫。 – lala

+0

如果我理解正確,您建議在經理中進行查詢,而不是回購? – lala

+0

我不使用@ORM \ Entity(repositoryClass =「」)'方法。 分揀。就我個人而言,我會接受這兩個課程的試用,那麼接下來要做什麼顯而易見。在創建一個大型存儲庫之前,您已經停止了,所以它可能是您的方式。 –

1

嗯,我真的不知道這是一個很好的做法,但你可以在不連接實體創建一個存儲庫(我的意思是,不與ORM註解)

所以我只是在我的service.yml創建此:

renting.metadata.car: 
    class: Doctrine\ORM\Mapping\ClassMetadata 
    arguments: [ %car% ] 

這:

repair.repository.car: 
    class: carRepository 
    arguments: [@doctrine.orm.entity_manager, @renting.metadata.car] 

這是工作

相關問題