Symfony与外部数据库的多对多关系

时间:2010-12-06 19:59:21

标签: php doctrine symfony-1.4

在我的应用程序中,我需要查询外部数据库数据库中的表,该数据库通过多对多关系链接到我的默认数据库。我的中间表位于我的默认数据库中。

为了做到这一点,我修改了我的database.yml以包含外部数据库。然后我在schema.yml中添加了中间表(message_news_rel,位于我的默认数据库中)和来自外部源(新闻)的表。

以下是我如何指定关系:

MessageNews:
  connection: uda_iPoste
  tableName: message_news_rel
  columns:
    message_id:
      type: integer(10)
      primary: true
    news_id:
      type: integer(10)
      primary: true
  relations:
    Message:
      local: message_id
      foreign: id
      foreignAlias: MessageNewses
    News:
      local: news_id
      foreign: id
      foreignAlias: MessageNewses

News:
...
  relations:
    Messages:
      class: Message
      foreignAlias: Newses
      refClass: MessageNews
      local: news_id
      foreign: message_id

Message:
...
  relations:
    Newses:
      class: News
      foreignAlias: Messages
      refClass: MessageNews
      local: message_id
      foreign: news_id

当我在我的应用程序中尝试使用该模型时,我收到此错误:

Base table or view not found: 1146 Table 'uda_web_dev.message_news_rel' doesn't exist

......毫无疑问地提到了这部分问题:

FROM news n LEFT JOIN message_news_rel 

这让我假设Symfony在尝试建立关系时没有将连接从我的默认数据库切换到我的外部数据库。

如果我遗漏了任何重要细节,请告诉我。

是否有针对此问题的已知修复程序?

1 个答案:

答案 0 :(得分:0)

如果你理性地思考它,你的要求有点多。每个查询或事务都应该只涉及要执行它的数据库中存在的表。不要忘记数据库抽象总是有其局限性,如果你检查每个实现,它们抽象查询创建和操作,但我不知道它们如何不能抽象数据库。

因此,如果您必须拆分数据库,那么请实现某种dabatase集群。否则,查询中的实现表位于同一数据库中,然后将结果连接到symfony。