У меня есть многоязычная база данных (на основе здесь, 3-й вариант .)
Моя схема базы данных выглядит следующим образом:
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
Я использую Symfony 2 с Doctrine, и мне нужен отчет для всех статей на определенном языке (передается как параметр).
Проблема возникает, когда Статья имеет Имя , Описание или Ссылка на определенном языке, но не имеет Ум (по крайней мере, не на требуемом языке).
Мой лучший подход на данный момент - это 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
;
Есть ли способ упростить запрос и заставить его работать в DQL Doctrine?
С уважением,
Дан Кернау