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