Nette
Database

databázový layer
pro PHP

Database Core

Nette Database Core je základní vrstva pro přístup k databázi, tzv. database abstraction layer. Tvoří obálku nad PDO a poskytuje základní funkcionalitu pokládání dotazů.

Database Explorer

Nette Database Explorer zásadním způsobem zjednodušuje získávání dat z databáze bez nutnosti psát SQL dotazy. Pokládá efektivní dotazy a nepřenáší zbytečná data.

Přes 10 let vývoje

Nette vyvíjíme přes 10 let - a číslo stále roste! Knihovny, které poskytujeme, jsou proto velmi zralé, stabilní a široce používané. Věří jim řada globálních korporací a pohání mnoho významných webových stránek. Kdo používá a důvěřuje Nette?

Databáze

Nette Framework vám poskytuje vrstvu pro výrazně pohodlnější práci s databázemi. Co umí?

  • snadno skládat SQL dotazy
  • snadno získávat data
  • pokládá efektivní dotazy a nepřenáší zbytečná data

Třída Nette\Database\Connection tvoří obálku nad PDO a reprezentuje připojení k databázi. Základní funkcionalitu poskytuje Nette\Database\Context. Nette\Database\Table poskytuje pokročilou vrstvu pro práci s tabulkami.

Vytvoření připojení

Pro vytvoření nového připojení k databázi stačí vytvořit novou instanci třídy Nette\Database\Connection:

use Nette\Database\Connection;
$connection = new Connection($dsn, $user, $password);

Nette\Database si vytvoří vlastní vnitřní ovladač a nastaví své chování podle toho, jaký používáte databázový server. Nette podporuje následující databáze:

Databázový server DSN jméno Podpora v Database Podpora v Database\Table
MySQL mysql ANO ANO
PostgreSQL pgsql ANO ANO
Sqlite 3 sqlite ANO ANO
Sqlite 2 sqlite2 ANO
Oracle oci ANO
MS SQL (PDO_SQLSRV) sqlsrv ANO ANO
MS SQL (PDO_DBLIB) mssql ANO
ODBC odbc ANO

Volitelný čtvrtý parametr konstruktoru Connection umožňuje přidat dodatečné parametry. Tyto volby jsou předány jak konstruktoru PDO, tak vnitřnímu ovladači, mohou tedy obsahovat konfiguraci pro instanci PDO i pro instanci ovladače.

Všechna připojení jsou v základu vytvořená „líně“. To znamená, že připojení k databázi je navázáno až ve chvíli, kdy je poprvé potřeba, ne když je vytvořena instance Connection. Toto chování můžete zakázat přidáním konfigurace 'lazy' => FALSE.

Ovladač databáze je zvolen podle použitého DSN jména. Můžete ale poskytnout vlastní implementaci ovladače. To uděláte předáním jména ovladače jako hodnoty parametru driverClass.

$connection = new Connection($dsn, $user, $password, array(
    'lazy' => FALSE,
    'driverClass' => 'App\JmenoVasiVlastniImplementaceOvladace'
));

Nejjednodušším způsobem, jak nastavit připojení k databázi, je v aplikační konfiguraci. NetteExtension umožňuje vytvoření více připojení. NetteExtension také usnadňuje přidání panelu databáze do Tracy debugger baru.

nette:
    database:
        default:
            dsn:        "mysql:host=127.0.0.1;dbname=test"
            user:       "root"
            password:   "password"
            options:    [PDO::MYSQL_ATTR_COMPRESS = true]
            debugger:   true        # panel v debugger baru
            explain:    true        # explain dotazů v debugger bar
            reflection: discovered  # nebo conventional nebo classname, výchozí je discovered
            autowired:  true
        anotherConnection:
            dsn: ...
            autowired: false

Dotazy

Základní funkcionalitu poskytuje Nette\Database\Context. Database\Context umožňuje jednoduše pokládat databázové dotazy voláním metody query:

use Nette\Database\Context;

$database = new Context($connection);

$database->query('INSERT INTO users', array( // parametr může být pole
    'name' => 'Jim',
    'created' => new DateTime, // nebo objekt DateTime
    'avatar' => fopen('image.gif', 'r'), // nebo soubor
), ...); // je možné také provést více vložení najednou

$database->query('UPDATE users SET ? WHERE id=?', $data, $id);
$database->query('SELECT * FROM categories WHERE id=?', 123)->dump();