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();