【发布时间】:2011-12-26 14:31:07
【问题描述】:
我有一个多语言数据库(灵感来自here, the 3rd option。)
我的数据库架构如下所示:
Article: (id, fk_name, fk_description, fk_reference, fk_um)
Translation: (id)
TranslationText: (id, fk_translation, fk_language,text)
Language (id, name)
Article --(M:1)--> Translation --(1:M)--> TranslationText --(M:1)--> Language
我正在使用带有 Doctrine 的 Symfony 2,我需要以某种语言(作为参数传递)的所有文章的报告。
当文章有一个特定语言的名称、描述或参考,但没有'没有嗯(至少不是要求的语言)。
到目前为止,我最好的方法是这个 SQL,由于缺少嵌套连接,我无法在 Doctrine 2 中实现。(language_id = 28)
select ing.*
, tx_name.text, tx_description.text, tx_reference.text, tx_um.text
from Article ing
left join (Translation t_name left
join TranslationText tx_name
on t_name.id = tx_name.fk_translation
and tx_name.fk_language = 28)
on ing.fk_name = t_name.id
left join (Translation t_description
left join TranslationText tx_description
on t_description.id = tx_description.fk_translation
and tx_description.fk_language = 28)
on ing.fk_description = t_description.id
left join (Translation t_reference
left join TranslationText tx_reference
on t_reference.id = tx_reference.fk_translation
and tx_reference.fk_language = 28)
on ing.fk_reference = t_reference.id
left join (Translation t_um
left join TranslationText tx_um
on t_um.id = tx_um.fk_translation
and tx_um.fk_language = 28)
on ing.fk_um = t_um.id
;
有没有办法简化查询并使其在 Doctrine 的 DQL 中工作?
亲切的问候,
丹·塞尔瑙
【问题讨论】:
-
为什么需要这些嵌套连接?如果把括号去掉,把on子句移到正确的位置,结果不一样吗?
标签: sql database symfony1 doctrine