- Aplikace
- Databáze
- Šablony
- Formuláře
- Knihovny
- Návody
DbTable
Třída DbTable slouží k automatické práci v daty v databázi. DbTable
provádí sama dokonce veškeré escapování. To vše díky třídě DbStructure, od které získává patřičné informace.
Ze všecho nejdřív musíte začít vytvořením třídy dané tabulky. Tuto
práci můžete také nechat na frameworku a volat metodu
DbTable::init($tableName).
class PostsTable extends DbTable {}
$table = new PostsTable;
# or
$class = DbTable::init('posts'); # returns PostsTable
$table = new $class;
Nyní můžeme nastavovat třídě hodnoty jednotlivých sloupců.
Escapovaní se provede samo. Po nastavení hodnot stačí zavolat metodu
save(), který data uloží. Jestli dojde k updatu nebo instertu
se rozhodne na základě přítomnosti hodnoty primárního klíče. Pokud
nenastavíte hodnotu primárního klíče, bude provede insert. Hodnotu
primárního klíče můžete nastavit stejně jako jiné sloupce, nebo
postačí pouze předat jeho hodnotu v constructoru – to se může hodit,
pokud nevíte, který sloupec je primární.
$table = new UserTable();
$table->setId(4)
->setName('Jan Skrasek')
->setIsActive(true)
->save();
# or
$table = new UserTable(4);
...
V uvedeném příkladu se provede update na záznam, který má id 4. (To vše za předpokladu, že tabulka má sloupce id nastaven jako primární.) Jednotlivá jména se sloupců se převedou na „underscore“ verzi:
- Id ⇒ id
- Name ⇒ name
- IsActive ⇒ is_active
Třídu DbTable můžete používat pouze s tabulkami, jež mají definovaný primární klíč.
Jako hodnotu můžete předat také objekt DbTable. To se hodí v případě, že tento objekt ještě nemá primární klíč.
$group = new GroupTable();
$group->setName('member')
->setParent('guest');
$user = new UserTable();
$user->setName('Paul Book')
->setGroupId($group)
->save();
V tomto případě dojde při ukládání záznamu user také k uložení záznamu do group.
Smazání záznamu
Pokud máte nastavený primární klíč, pak můžete také záznam smazat
pomocí metody remove. Jestliže primární klíč není nastaven,
je vyhozena výjimka.
$user = new UserTable(4);
$user->remove();
Výběr dat
Instanci třídy DbTable můžete také využít k výběru dat
z databáze, tedy pouze jednoho určitého záznamu určeného pomocí
primárního klíče. Výběr provádíme pomocí metody get().
Primární klíč nastavte tak, jak jsme popsali výše, pomocí metody
set*, nebo pomocí constructoru.
$table = new UserTable(5);
# select all columns
$user = $table->get();
# select only some columns
$user = $table->get(array('username', 'password'));
Občas se může hodit ještě provést select pomocí jiného sloupce, než
je primární klíč. K tomu využijeme metodu getBy(). Její
první parametr určuje název sloupce, dle kterého proběhne výběr, jako
druhý parametr můžeme opět určit, které sloupce chceme vybrat.
$user = new UserTable;
$user->setUsername('fooxxx');
$data = $table->getBy('username', 'id'); # array('id' => ...)
Pokud u metody getBy vyberete také sloupec,
který je primárním klíčem, pak se daná hodnota primárního klíče
zároveň nastaví jako hodnota PK daného objektu. Na objekt pak lze
volat metodu save(), která záznam upraví místo přidání.
Generování formulářů
Třída obsahuje také metodu, která Vám vrátí formulář obsahující
prvky databázové tabulky. Metodě getForm() předáte volitelně
pouze názvy sloupců, pro které chceme formulář vygenerovat a dále
asociativní pole s popisky jednotlivých vstupních polí.
$form = $table->getForm(array(), array(
'username' => 'Uživatelské jméno',
'password' => 'Heslo',
'submit' => 'Uložit',
));
echo $form;
