Nette Database
Nette Databaseは、シンプルさとスマートな機能に重点を置いた、PHP向けの強力でエレガントなデータベース層です。データベースを操作する2つの方法を提供します – アプリケーションの迅速な開発のためのExplorer、またはクエリを直接操作するためのSQLアクセス。
SQLアクセス
- 安全なパラメータ化クエリ
- SQLクエリの形式に対する正確な制御
- 高度な機能を持つ複雑なクエリを作成する場合
- 特定のSQL機能を使用してパフォーマンスを最適化する場合
Explorer
- SQLを書かずに迅速に開発
- テーブル間のリレーションを直感的に操作
- クエリの自動最適化を評価
- データベースを迅速かつ快適に操作するのに適しています
インストール
ライブラリはComposerツールを使用してダウンロードおよびインストールします:
サポートされているデータベース
Nette Databaseは以下のデータベースをサポートしています:
データベースサーバ | DSN名 | Explorerでのサポート |
---|---|---|
MySQL (>= 5.1) | mysql | はい |
PostgreSQL (>= 9.0) | pgsql | はい |
Sqlite 3 (>= 3.8) | sqlite | はい |
Oracle | oci | – |
MS SQL (PDO_SQLSRV) | sqlsrv | はい |
MS SQL (PDO_DBLIB) | mssql | – |
ODBC | odbc | – |
データベースへの2つのアプローチ
Nette Databaseは選択肢を提供します:SQLクエリを直接記述する(SQLアクセス)か、自動的に生成させる(Explorer)かです。両方のアプローチが同じタスクをどのように解決するかを見てみましょう:
SQLアクセス – SQLクエリ
Explorerアクセス – SQLの自動生成
ExplorerアクセスはSQLクエリを自動的に生成および最適化します。上記の例では、SQLアクセスはN+1個のクエリ(著者用に1つ、各著者の本用に1つ)を生成しますが、Explorerはクエリを自動的に最適化し、2つだけ実行します – 著者用に1つ、すべての本用に1つです。
両方のアプローチは、必要に応じてアプリケーション内で自由に組み合わせることができます。
接続と設定
データベースに接続するには、Nette\Database\Connectionクラスのインスタンスを作成するだけです:
パラメータ $dsn
(データソース名)は、PDOが使用するものと同じです。例:host=127.0.0.1;dbname=test
。失敗した場合、Nette\Database\ConnectionException
例外をスローします。
ただし、より便利な方法はアプリケーション設定を使用することです。ここにdatabase
セクションを追加するだけで、必要なオブジェクトとTracyバーのデータベースパネルが作成されます。
その後、接続オブジェクトをDIコンテナからサービスとして取得します。例:
データベース設定の詳細については、こちらをご覧ください。
Explorerの手動作成
Nette
DIコンテナを使用しない場合は、Nette\Database\Explorer
インスタンスを手動で作成できます:
接続管理
Connection
オブジェクトを作成すると、接続が自動的に確立されます。接続を遅延させたい場合は、遅延モードを使用します –
これは設定でlazy
を設定するか、次のようにして有効にします:
接続を管理するには、connect()
、disconnect()
、reconnect()
メソッドを使用します。
connect()
は、まだ存在しない場合に接続を作成し、Nette\Database\ConnectionException
例外をスローする可能性があります。disconnect()
は、現在のデータベース接続を切断します。reconnect()
は、データベースへの切断と再接続を実行します。このメソッドもNette\Database\ConnectionException
例外をスローする可能性があります。
さらに、onConnect
イベントを使用して接続に関連するイベントを監視できます。これは、データベースとの接続が確立された後に呼び出されるコールバックの配列です。
Tracyデバッグバー
Tracyを使用している場合、デバッグバーにデータベースパネルが自動的にアクティブになり、実行されたすべてのクエリ、そのパラメータ、実行時間、およびコード内で呼び出された場所が表示されます。
