Nette Database je výkonná a elegantní databázová vrstva pro PHP, která vyniká svou jednoduchostí použití a chytrými funkcemi. Nevyžaduje žádnou složitou konfiguraci nebo generování entit, s Nette Database můžete začít pracovat okamžitě.
Nette Database nabízí dva hlavní přístupy k práci s databází:
Database Core
- Nízkoúrovňová vrstva
- Bezpečné parametrizované dotazy
- Podobné PDO, ale s lepším API
- Vhodné když:
- Potřebujete maximální kontrolu nad SQL dotazy
- Píšete vlastní databázovou abstrakci
- Provádíte komplexní databázové operace
Database Explorer
- Vysokoúrovňová vrstva
- Postavená nad Database Core
- Umožňuje pracovat s daty bez psaní SQL
- Automatická optimalizace dotazů
- Intuitivní práce s relacemi mezi tabulkami
- Vhodné když:
- Chcete rychle a pohodlně pracovat s databází
- Potřebujete automatickou optimalizaci dotazů
- Využíváte vztahy mezi tabulkami
Instalace
Knihovnu stáhnete a nainstalujete pomocí nástroje Composer:
composer require nette/database
Připojení a konfigurace
Pro připojení k databázi vytvořte instanci třídy Nette\Database\Connection:
$db = new Nette\Database\Connection($dsn, $user, $password);
Parametr $dsn (data source name) používá stejný formát jako PDO, např.
host=127.0.0.1;dbname=test.
Elegantněji můžete nastavit připojení pomocí konfiguračního
souboru. Stačí přidat sekci database a framework se postará o vytvoření potřebných objektů včetně
databázového panelu v Tracy.
database:
dsn: 'mysql:host=127.0.0.1;dbname=test'
user: root
password: password
Objekt pro připojení pak získáte jako službu z DI kontejneru:
class Model
{
// pro práci s vrstvou Database Explorer si předáme Nette\Database\Explorer
public function __construct(
private Nette\Database\Connection $db,
) {
}
}
Více informací o konfiguraci databáze.
Výběr vrstvy
Database Core je ideální pro přímou práci s SQL dotazy. Poskytuje bezpečné parametrizované dotazy a lepší API než PDO:
$database = new Nette\Database\Connection($dsn, $user, $password);
// SELECT dotazy
$result = $database->query('SELECT * FROM users WHERE role = ?', 'admin');
foreach ($result as $row) {
echo $row->name;
}
// INSERT s pomocí pole
$database->query('INSERT INTO users', [
'name' => 'John Doe',
'email' => '[email protected]',
'created_at' => new DateTime,
]);
Database Explorer nabízí intuitivní práci s databází bez nutnosti psát SQL dotazy:
// Vytvoření instance Exploreru
$explorer = new Nette\Database\Explorer($connection, $structure, $conventions);
// Načtení dat
// - automaticky optimalizuje dotazy
// - načítá pouze použité sloupce
$users = $explorer->table('users');
// Jednoduché filtrování
$users->where([
'role' => 'admin',
'active' => true,
]);
// Práce s relacemi
foreach ($users as $user) {
// Automaticky vytvoří efektivní JOIN
echo $user->name; // jméno uživatele
echo $user->role->description; // popis role z propojené tabulky
// Výpis všech článků uživatele
foreach ($user->related('articles') as $article) {
echo $article->title;
}
}
// Vložení dat
$users->insert([
'name' => 'John Doe',
'email' => '[email protected]',
]);
Obě vrstvy lze v aplikaci kombinovat – pro běžné operace použít Explorer a pro specifické případy přepnout na Core.
Automatická optimalizace výkonu
- Inteligentní načítání souvisejících dat
- Adaptivní načítání pouze potřebných sloupců
- Minimalizace počtu databázových dotazů
Bezpečnost na prvním místě
- Vestavěná ochrana proti SQL injection
- Parametrizované dotazy
- Bezpečné zpracování vstupních dat
Intuitivní práce s relacemi
- Přirozený přístup k propojeným datům
- Podpora všech typů vazeb (1:1, 1:N, M:N)
- Bez nutnosti psát JOIN dotazy
Pohodlné debuggování
- Panel do Tracy
- Všechny provedené dotazy s časy
- Vysvětlení dotazů (EXPLAIN)
Nejjednodušší parametrické dotazy
Stačí jen čárka a hodnota:
$database->query('
SELECT *
FROM users
WHERE name =', $name
);
Žádné ?, :param, @param nebo jiné speciální syntaxe – prostě jen otazník.
Chytrá detekce vazeb
Nepotřebujete konfigurovat entity ani mapování:
$book = $explorer->table('book')->get(1);
// automaticky nalezne vazbu přes book.author_id
echo $book->author->name;
Adaptivní načítání dat
Automaticky načítá jen sloupce, které skutečně používáte v kódu
foreach ($books as $book) {
// načte z databáze jen sloupec 'title'
echo $book->title;
}
Přes 18 let vývoje
Nette vyvíjíme přes 18 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?
Instalace
Knihovnu stáhnete a nainstalujete pomocí nástroje Composer:
composer require nette/database
Podporované databáze
Nette podporuje následující databáze:
| Databázový server | DSN jméno | Podpora v Core | Podpora v Explorer |
|---|---|---|---|
| MySQL (>= 5.1) | mysql | ANO | ANO |
| PostgreSQL (>= 9.0) | pgsql | ANO | ANO |
| Sqlite 3 (>= 3.8) | sqlite | ANO | ANO |
| Oracle | oci | ANO | – |
| MS SQL (PDO_SQLSRV) | sqlsrv | ANO | ANO |
| MS SQL (PDO_DBLIB) | mssql | ANO | – |
| ODBC | odbc | ANO | – |