Výpis „hlavního“ jazyku, pokud není vyplněn sekundární jazyk
- Stejsi
- Člen | 21
Ahoj, omlouvám se pokud je to zde na fóru již řešené, ale mám
následující problém.
Mám tři entity – kategorie, jazyk a propojenou entitu těchto dvou
v které jsou texty ke kategoriím v závislosti na jazyku viz. Obrázek .
Data k jazyků vytáhnu následovně
$this->getCategoryLangTable()->select(
'cms_category_lang.*, cms_category.id_cms_category, cms_category.id_parent AS parent, cms_category.level_depth AS level, cms_category.active AS active,cms_category.position AS position, cms_category.date_add AS date_add, cms_category.date_upd AS date_upd'
)->where('cms_category_lang.id_lang =?', $idLang)
->order("level,parent,$order");
Když zadám nějaký jazyk, který má vyplněné všechny kategorie (např. čeština – ta musí být při přidání kategorie vyplněná) tak se vypíšou všechny kategori, problém je že když zadám jazyk u kterého nemusí být vyplněn překlad, tak se pochopitelně nevypíšou kategorie, u kterých není tento jazyk vyplněn – v takovém případě bych potřeboval aby se vypsaly překlady kategorie z hlavního jazyka (češtiny id = 1) . Jak prosím na to? Děkuji!
- Stejsi
- Člen | 21
Ahoj, pořád si s tím nevím rady, třeba mi někdo pomůže, když napíšu jak bych to vytáhl přes normální SQL dotaz.
select cms_category.*
if(b.caption is null, c.caption, b.caption) as caption,
from cms_category a
left join cms_category_lang b on a.id=b.idvazba and
b.idlang=„.intval($_SESSION["idlang“]).„
left join cms_category_lang c on a.id=c.idvazba and c.idlang=1 “;
Neví někdo jak toto převést na Nette-database dotaz ?
- petr.pavel
- Člen | 535
Tady je syntaxe pro NotORM (v NDB nedělám). Není to přesně, co's napsal ty, používám jen jeden join. Tvůj dotaz by podle mě beztak nefungoval. Psáno z hlavy.
$kategorie = $db->cms_category()
->select('cms_category.*')
->select("SUBSTRING_INDEX(GROUP_CONCAT(IFNULL(cms_category_lang:caption, '') ORDER BY cms_category_lang:caption IS NULL SEPARATOR '|'), '|', 1) AS caption")
->where('cms_category_lang:idlang', array(intval($_SESSION["idlang"]), 1))
->group('cms_category.id')
Předpokládám, že máš cizí klíče definované na úrovni databáze (cms_category.id = cms_category_lang.idvazba).
Ten group jsem tam dodal svévolně, podle mě bys ho tam měl chtít, jinak se ti pro každou kategorii vrátí víc řádek než jen jedna.