Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Symfony2:有条件地创建实体表_Symfony_Doctrine Orm_Entity - Fatal编程技术网

Symfony2:有条件地创建实体表

Symfony2:有条件地创建实体表,symfony,doctrine-orm,entity,Symfony,Doctrine Orm,Entity,我有一个包,其中定义了实体。我希望能够以这样一种方式配置此捆绑包,即此实体将相关或不相关。所以,若bundle配置正确,那个么实体表不应该使用app/console原则:schema:update等创建,或者应该创建,它应该取决于配置 如何有条件地“禁用”实体,使其表不会由app/console原则:schema:update创建??我认为,尽管您可能会找到一种方法,但您正在使自己变得复杂。如果后端捆绑包是独立的,那么安装它总是可选的,因此它的实体是否被创建 您可以在Sonata捆绑包中找到一个

我有一个包,其中定义了实体。我希望能够以这样一种方式配置此捆绑包,即此实体将相关或不相关。所以,若bundle配置正确,那个么实体表不应该使用
app/console原则:schema:update
等创建,或者应该创建,它应该取决于配置


如何有条件地“禁用”实体,使其表不会由
app/console原则:schema:update创建?

我认为,尽管您可能会找到一种方法,但您正在使自己变得复杂。如果后端捆绑包是独立的,那么安装它总是可选的,因此它的实体是否被创建

您可以在Sonata捆绑包中找到一个示例,您可以根据需要管理用户,但是如果您使用的是FOSUserBundle,您可以选择安装SonataUserBundle,然后告诉fos_用户配置,新类属于Sonata用户,因此,由于类继承,新实体将保留大量新属性,用户的所有crud操作都将在Sonata视图中配置。SonataUser也有自己的用户实体,可以独立使用


我知道这不是你想要的,但可能你只是需要设法遵循这样的模式

您的场景要求您禁用
自动映射
,但默认情况下它似乎设置为
false

接下来要做的事情是确保捆绑包的
build
函数有条件地添加所需的内容,如下所述:


正如您所能做的那样,
build
仅在缓存为空时执行,因此这是您可以执行此操作的地方。您还可以查看如何在映射部分下搜索实体。

您可以告诉doctrine要在哪些目录下搜索实体:因此我想您可以将该实体放在它自己的目录中。但我怀疑你可能让事情变得比实际需要的更困难。原因是我目前有两个捆绑包:Config和ConfigDb,第二个是存储后端,第一个是使用原则。我想合并两者,并提供默认的数据库后端,但可切换。现在的问题是,如果它将切换到另一个后端服务,显然我不希望创建实体表:)。所以我需要创建这些表,并有条件地使用这些实体。您可以在配置中禁用自动映射并使用手动映射。或者我认为更好的方法是创建带有映射的模型类,并在每个应用程序中实现扩展此模型的空实体。您甚至可以让这个模型实现接口并在引用中使用它,而不是在条令配置中用实际类替换接口。