Výpis „hlavního“ jazyku, pokud není vyplněn sekundární jazyk

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Stejsi
Člen | 21
+
0
-

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
+
0
-

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
+
0
-

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.

Stejsi
Člen | 21
+
0
-

petr.pavel napsal(a):

Tady je syntaxe pro NotORM (v NDB nedělám)…

Fantastický, úžasné, super! Děkuji mockrát!!! Funguje to bezvadně! Ještě jednou díky!!