Rozšíření pro NotORM


04-08-2010 00:25 - Zdroj: php.vrana.cz
NotORM se výborně hodí pro pohodlné sestavování dotazů pokládaných do databáze, obzvlášť pokud potřebujeme pracovat se vztahy mezi tabulkami. Pokud je ale databáze navržena nešikovně nebo je příliš komplexní, tak by se hodilo nad nízkoúrovňovými funkcemi NotORM vytvořit ještě jednu vrstvu abstrakce. Vezměme si třeba takové vícejazyčné záznamy. Pokud překlady uchováváme v samostatné tabulce, můžeme je pomocí NotORM získat následujícím kódem: <?php // zjištění názvu a ceny produktu v dané skupině foreach ($notORM->product("group_id", $group) as $product) { foreach ($product->product_translation("language_id", $lang) as $product_translation) { $product_translation["name"]; } $product["price"]; } ?> Kód je sice mnohem jednodušší, než při použití nízkoúrovňových funkcí, pořád je ale dost krkolomný. A to ani nezohledňuje případ, že by překlad neexistoval. Představa, že bych musel tento kód psát při každém získání přeloženého textu, mě zrovna neláká. NotORM proto nyní (zatím pouze ve vývojové verzi) umožňuje určit třídu, ze které se budou vytvářet vracené řádky a která může chování upravovat. Třeba takhle: <?php class NotORM_Row_Lang extends NotORM_Row { static $lang = "cs"; function offsetExists($key) { if (!array_key_exists($key, $this->row)) { $table = $this->result->table . "_translation"; // pokud by překlad neexistoval, vrátíme anglickou verzi foreach ($this->$table("language_id", array(self::$lang, "en"))->order("language_id = 'en'")->limit(1) as $row) { foreach ($row as $key => $val) { $this->row[$key] = $val; } } } return parent::offsetExists($key); } ... - Pokračovat...
addthis





Poslední příspěvky z blogu:
php.vrana.cz


Nejčtenější

Prostřeno TV Prima, tentokrát opět v Praze, kuchyně mexická i belgická

Kdo přežije: Mikronésie na Prima COOL

Hlas ČeskoSlovenska: porota je kompletní

Kdo přežije: Čína na Prima COOL

Koho uvidíme v Survivor Heroes vs. Villains?


Zašlete svůj blog
Požadavky na Blog
Ochrana osobních údajů
Kontakty

This site uses Thumbshots previews