2016-03-03 129 views
4

我有一個包含其中定義的實體的包。我希望能夠以這種方式配置此捆綁包,以使此實體可以或不會相關。所以如果bundle配置正確,不應該使用app/console doctrine:schema:update等來創建實體表,或者應該 - 它應該取決於配置。Symfony2:有條件地創建實體表

如何有條件地「禁用」實體,使其表不會由app/console doctrine:schema:update創建?

+3

你可以告訴教義哪些目錄在映射部分下搜索實體:http://symfony.com/doc/current/reference/configuration/doctrine.html所以我想你可以把這個實體放在它自己的目錄中。但我懷疑你可能讓事情比他們需要的更困難。 – Cerad

+0

其原因是我目前有兩個捆綁包:Config和ConfigDb,第二個是第一個存儲後端,它使用的是Doctrine。我想將兩者合併並提供數據庫後端作爲默認值,但可切換。現在的事情是,如果它將與另一個後端服務切換,顯然我不希望創建實體表:)。所以我需要創建這些表,並有條件地使用這些實體。 –

+0

您可以在配置中禁用自動映射並使用手動映射。 或者我認爲更好的方法是使用映射創建模型類,並在您的每個應用程序中實現只擴展此模型的空實體。 你甚至可以讓這個模型實現接口,並在引用中使用它,而不是在原則配置中使用真實類的替代接口。 – zajca

回答

1

您的場景要求您禁用auto_mapping,但它默認情況下似乎設置爲falsehttp://symfony.com/doc/current/reference/configuration/doctrine.html

接下來要做的是確保你的包的build功能有條件增加了希望DoctrineOrmMappingPass也如這裏解釋:https://stackoverflow.com/a/26975083/1794894

你可以see in the sourcebuild只一次緩存是空的,所以這個執行是你可以做到這一點的地方。你也可以看看如何在add compiler passes那裏。

0

我認爲,雖然也許你可以找到一種方法,但你卻使自己複雜化了。如果後端捆綁包是獨立的,那麼安裝它總是可選的,因此它是實體創建或不創建的。

您可以在Sonata包中找到一個示例,您可以根據需要管理用戶,但是如果您使用的是FOSUserBundle,則可以選擇安裝SonataUserBundle,然後告訴fos_user配置新類屬於索納塔用戶,因此,由於類的繼承,新實體將會持續很多新的屬性,並且用戶的所有crud操作都將在奏鳴曲視圖中進行配置。 SonataUser也有它自己的用戶實體以獨立的方式使用。

我知道這不是你要求的,但可能你只需要設法按照這樣的模式。