Nette\Database\Selector a jazykové verzie

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

Da sa nejako dosiahnuť globálne, aby v prípade použitia

$article = $db->table('article')->get(22);
$article->title;

vybralo podla $lang jazykovú verziu title, napr. title_sk, title_cz, title_en.

vrana
Člen | 131
+
0
-

V NotORM to jde zděděním třídy NotORM_Row, ukazuji to na školení. Jen kvůli jednoduššímu kešování používám $article["title_"]. V Nette to zatím nejde.

Editoval vrana (23. 1. 2011 14:06)

dakota
Člen | 148
+
0
-

Je možné bližšie uviesť ako to riešiť, nie každý má možnosť zúčastniť sa spomínaného školenia. Zaujímalo by ma hlavne či sa jazyková verzia nastavuje zvlášť pre každú tabuľku alebo stĺpec alebo je to riešené všeobecne, že zavolaním $article["title_"], $category["name_"] sa vlastne vytiahne požadovaná jazyková verzia?

Kedy môžme očakávať v Nette\Database\Selector možnosť použivať vlastné, resp. podedené TableRow a DatabaseReflection?

Editoval dakota (23. 1. 2011 20:46)

vrana
Člen | 131
+
0
-

Je to úplně obecné, offsetGet vypadá takhle (ostatní obdobně):

<?php
function offsetGet($key) {
	return parent::offsetGet(preg_replace('~_$~', '_' . LANG, $key));
}
?>
dakota
Člen | 148
+
0
-

Pekné riešenie. Ale to funguje vlastne len v prípade $category['name_'], $category->name_.

Šlo by to zovšeobecniť až do takejto podoby?

$category = $db->table('category')->select('id, name_, parent')->order('name_');
$category = $db->table('category')->where('name_ LIKE ?', 'a%');
echo $category->name_;

vykonané dotazy:

SELECT id, name_en, parent FROM category ORDER BY name_en;
SELECT name_en FROM category WHERE name_en LIKE 'a%';

ako náhrada:

$category = $db->table('category')->select("id, name_$lang, parent")->order("name_$lang");
$category = $db->table('category')->where("name_$lang LIKE ?", 'a%');
echo $category->name_;

Mohlo by sa pritom napr. použiť preg_replace('~_(?!\w)~', '_' . $lang, $s).

Editoval dakota (24. 1. 2011 11:27)

vrana
Člen | 131
+
0
-

Nic takového teď bohužel nejde.