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;