Db

Jet sice obsahuje robustní ORM DataModel a v dobře navržené a napsané aplikaci je tedy potřeba použití SQL přímo potlačena. To ovšem neznamená, že je práce s SQL znemožněná. Naopak. I když použijete ORM, tak pro různé specifické úkoly je vnodhé, nebo nutné, použít přímo SQL. Jde například o různé analytické výstupy, náročné aktualizační skripty a tak dále. Nehledě nato, že Jet DataModel pochopitelně s databází také pracuje a tedy potřebuje nějaký unifikovaný backend.

Z toho důvodu Jet obsahuje relativně jednoduchou fasádu pro práci s databází Jet\Db. Ta momentálně jako backend využívá PDO, ale má několik dalších účelů:

  • Začlenit práci s DB do celku a využít ostatních rysů systému jako je definice aplikační konfigurace, továrny aby práce s DB zapadala do celkové koncepce Jet.
  • Vytvořit unifikovanou vrstvu, která případně v budoucnu umožní nahradit PDO něčím jiným, pokud přijde lepší řešení, či umožnit vývojářům vytvořit si vlastní backend s tím, že rozhraní zůstane vždy zachováno a tedy nebude nutné modifikovat aplikaci.
  • Napojit práci s DB na Jet Profiler.

Praktické použití

Ukažme si rovnou jak se s Jet\Db pracuje. V rámci aplikační konfigurace můžete mít definováno minimálně jedno, ale klidně i více spojení na databázi. Před prací s SQL potřebujete získat instanci tohoto spojení. Spojením se myslí instance příslušného backendu + příslušná konfigurace. Dále už se spojením pracujete vlastně běžným způsobem:

$db Db::get(); //Default connection 
$db->execute('INSERT INTO some_table SET 
    name=:name,
    age=:age'
,
[
    
'name' => 'Some Name',
    
'age' => 42
]);

$adults $db->fetchAll('SELECT id, name, age FROM same_table WHERE age>18');



$erp_db Db::get('erp_connection');
$bills $erp_db->fetchAssoc
    
query'SELECT * FROM bills WHERE invoice_date>=:date AND paid=0'
    
query_data: [
        
'invoice_date' => '2021-12-01'
    
], 
    
key_column'invoice_number'
);

Přehled metod které můžete použít pro práci s SQL najdete u popisu rozhraní backendu Jet\Db_Backend_Interface.

Uspořádání

Konfigurace

Konfigurace Db vužívá systému aplikační konfugurace. Je tedy možné snadno implementovat věci jako je instalátor, nebo konfiguraci rozšiřovat o další parametry a tak dále. V rámci Jet\Db jsou pro práci s konfigurací určeny tyto třídy:

  • Db_Config
    Hlavní konfigurační definice. Nejedná se o definici konkrétního spojení, ale drží v sobě přehled definic spojení a informaci o tom, které spojení je bráno jako hlavní.
  • Db_Backend_Config
    Abstraktní třída konfigurace backendu - tedy konkrétního spojení.
  • Db_Backend_PDO_Config
    Třída definice konfigurace spojení na databázi pro výchozí backend PDO.

A aplikaci však není nutné a ani vhodné s těmito třídami operovat ve smyslu přímého vytváření jejich instancí. K tomu i v případě Jet\Db slouží příslušná továrna. Navíc v běžné aplikaci neexistuje nutnost se o konfiguraci jakkoliv starat (pokud tedy nevyvíjíte například nový instalátor).

Backend

Rozhraní backendu definuje Jet\Db_Backend_Interface a výchozí backend implementuje Jet\Db_Backend_PDO.

Stejně jako pro konfiguraci platí i pro backend fakt, že v aplikaci se nemusíte o tyto třídy starat a už vůbec ne přímo vytvářet nějaké instance. Spojení máte k dispozici přes metodu Jet\Db::get().

I s backendem se interně pracuje přes příslušnou továrnu. Máte tedy možnost snadno a transparentně zaměnit třídu Jet\Db_Backend_PDO za svou implementaci, pokud budete potřebovat.

Předchozí kapitola
Jet\IO_Dir
Další kapitola
Jet\Db