在我的应用程序中,我需要查询外部数据库数据库中的表,该数据库通过多对多关系链接到我的默认数据库。我的中间表位于我的默认数据库中。
为了做到这一点,我修改了我的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在尝试建立关系时没有将连接从我的默认数据库切换到我的外部数据库。
如果我遗漏了任何重要细节,请告诉我。
是否有针对此问题的已知修复程序?
答案 0 :(得分:0)
如果你理性地思考它,你的要求有点多。每个查询或事务都应该只涉及要执行它的数据库中存在的表。不要忘记数据库抽象总是有其局限性,如果你检查每个实现,它们抽象查询创建和操作,但我不知道它们如何不能抽象数据库。
因此,如果您必须拆分数据库,那么请实现某种dabatase集群。否则,查询中的实现表位于同一数据库中,然后将结果连接到symfony。