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
为Symfony5捆绑包实体配置第二个实体管理器_Symfony_Doctrine - Fatal编程技术网

为Symfony5捆绑包实体配置第二个实体管理器

为Symfony5捆绑包实体配置第二个实体管理器,symfony,doctrine,Symfony,Doctrine,我希望有两个实体管理器,一个用于捆绑包中定义的实体的SQLite数据库,另一个用于主应用程序。这样,我就可以将从未更改的数据加载到一个数据库中,并将夹具、测试等加载到应用程序数据库中。我希望以下内容能够转储捆绑包实体的sql,但事实并非如此: bin/console doctrine:schema:update --dump-sql --em=geonames [OK] No Metadata Classes to process.

我希望有两个实体管理器,一个用于捆绑包中定义的实体的SQLite数据库,另一个用于主应用程序。这样,我就可以将从未更改的数据加载到一个数据库中,并将夹具、测试等加载到应用程序数据库中。我希望以下内容能够转储捆绑包实体的sql,但事实并非如此:

bin/console doctrine:schema:update --dump-sql  --em=geonames
[OK] No Metadata Classes to process.                                                                                   
类似地,我希望easyadmin允许我为bundle实体定义类,但它也失败了

#easy_admin.yaml
实体:
行政的:
类别:Bordeux\Bundle\GeoNameBundle\Entity\Administrative
配置的类 路径的“Bordeux\Bundle\GeoNameBundle\Entity\Administrative” “easy_admin.entities.Administrative”不是映射实体

我希望它与名称空间有关,或者可能与is_bundle参数有关。我花了几个小时来研究这个问题,并附上了关于多实体管理器的教程和文档,但我找不到任何说明如何处理来自第三方包的实体的内容

#条令.yaml
教条:
dbal:
默认连接:默认
连接:
违约:
url:“%env(解析:数据库\ url)%”
地理名称:
url:“%env(数据库\地理名称\ url)%”
orm:
默认\实体\管理器:默认
实体管理人员:
违约:
连接:默认值
命名策略:条令、规则、命名策略、下划线、数字
自动映射:true
映射:
应用程序:
这是错误的吗
类型:注释
目录:'%kernel.project\u dir%/src/Entity'
前缀:“应用\实体”
别名:App
地理名称:
连接:地理名称
映射:
BordeuxGeoNameBundle:
这是真的吗
类型:注释
目录:“实体”
前缀:“地理名称\实体”
别名:Geonames

我没有为最新和最好的Symfony版本配置多个实体管理器,因此我设置了一个小测试用例,并为配置提供了以下内容:

    orm:
        default_entity_manager: default
        auto_generate_proxy_classes: true
        entity_managers:
            default:
                connection: default
                naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
                mappings:
                    App:
                        is_bundle: false
                        type: annotation
                        dir: '%kernel.project_dir%/src/Entity'
                        prefix: 'App\Entity'
                        alias: App
            geonames:
                connection: geonames
                naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
                mappings:
                    BordeuxGeoNameBundle:
                        is_bundle: true
                        type: annotation
                        dir: 'Entity'
                        prefix: 'Bordeux\Bundle\GeoNameBundle\Entity'
                        alias: GeoNames
我使用以下方法对其进行了测试:

bin/console doctrine:mapping:info --em=geonames
并确认实体正在映射。我没有安装EasyAdmin并对其进行测试,但我看不出它不起作用的任何原因

主要区别在于使用实体名称空间作为前缀属性


为了我自己将来的参考,我将测试项目提交给了。

这些可能很棘手。通常前缀是名称空间so:Bordeux\Bundle\GeoNameBundle\Entity。并从默认管理器中取出自动映射。您可以使用“bin/console原则:mapping:info--em whatever”作为快速测试。祝你好运