【问题标题】:Symfony2: How to generate Entities from MULTIPLE Existing Databases in SAME Bundle?Symfony2:如何从 SAME Bundle 中的多个现有数据库生成实体?
【发布时间】:2013-03-17 11:26:41
【问题描述】:

我的目标是在一个项目包中访问多个数据库

我通读了 symfony2 文档并设法做到了以下几点:

  1. configure multiple connections for different Bundles
  2. generate Entities from ONE Existing Database 使用:

    php app/console doctrine:mapping:import AcmeBlogBundle annotation
    php app/console doctrine:generate:entities AcmeBlogBundle
    

但我找不到从同一捆绑包中的多个现有数据库生成实体的方法,以便我可以访问一个捆绑包中的多个数据库。有任何想法吗?

附:我不熟悉教义。所以实际上如果有办法在没有 Doctrine 的情况下做 Symfony2,我也将不胜感激。

更新 #1:

Cerad's answer 非常接近。然而,一个问题还没有解决。由于我在不同的数据库中有一些相同的表名,最好将它们组织到实体文件夹中的单独文件夹中。我检查过类似的帖子,例如 thisthat。但是解决方案对我不起作用。他们的解决方案只是将所有实体直接放入实体文件夹,忽略 config.yml 中指定的 dir 选项。有解决此问题的方法吗?

【问题讨论】:

    标签: php symfony doctrine


    【解决方案1】:

    第一步是配置多个实体管理器(不是连接),每个数据库一个。然后,您可以在学说命令上使用 --em 选项来指定要使用的实体管理器。

    php app/console doctrine:mapping:import "AcmeBlogBundle" annotation --em=name1
    php app/console doctrine:mapping:import "AcmeBlogBundle" annotation --em=name2
    

    请注意,您将无法使用教义直接查询(连接)多个数据库。至少不是很容易。只要您计划一次将查询限制在一个数据库中,就可以了。

    这实际上是一个有点高级的话题。您可能想花一些时间阅读学说文档。可能也更容易开始使用一个数据库,然后再拆分。

    【讨论】:

    • 感谢您的回复。还有一个问题还没有解决。因为我在不同的数据库中有一些相同的表名。所以最好将它们组织到实体文件夹中的单独文件夹中。我已经检查了stackoverflow.com/questions/13765785/…,但它似乎不能做对吗?这个问题有解决办法吗
    • 唯一直接的解决方法是将数据库名称添加到表名称中。但这样做意味着各种学说命令将停止工作,这意味着对数据库名称进行硬编码。根据您的需要,您可能能够使用 sql 视图来基本上更改表名。我认为您最好使用多个捆绑包。
    • 你应该创建一个新的 symfony 安装,生成一个 bundle 拉下你的表,然后编辑命名空间并将文件复制到你现有的 bundle 中。这是一种痛苦,但它比试图在映射生成器中破解你的方式更容易。您绝对可以在实体下拥有命名空间(我的项目中有多个级别)。 Bundle/Entity/ThingsThatMakeMeMad/SpilledMilk.php
    • 感谢您的提示。好吧,如果同步学说对象涉及太多手动操作,那么我更喜欢使用简单的 php mysql connect 命令来查询数据库。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 1970-01-01
    • 2016-01-02
    • 2011-08-15
    • 1970-01-01
    • 2015-08-04
    相关资源
    最近更新 更多