構造リフレクション
Nette Databaseは、Nette\Database\Reflectionクラスを使用してデータベース構造をイントロスペクションするためのツールを提供します。これにより、テーブル、カラム、インデックス、および外部キーに関する情報を取得できます。リフレクションを使用して、スキーマの生成、データベースを操作する柔軟なアプリケーションの作成、または一般的なデータベースツールの作成を行うことができます。
リフレクションオブジェクトは、データベース接続インスタンスから取得します:
テーブルの取得
読み取り専用プロパティ $reflection->tables
には、データベース内のすべてのテーブルの連想配列が含まれています:
さらに2つのメソッドが利用可能です:
テーブル情報
テーブルは、以下の読み取り専用プロパティを提供するTableオブジェクトによって表されます:
$name: string
– テーブル名$view: bool
– ビューであるかどうか$fullName: ?string
– スキーマを含む完全なテーブル名(存在する場合)$columns: array<string, Column>
– テーブルのカラムの連想配列$indexes: Index[]
– テーブルのインデックスの配列$primaryKey: ?Index
– テーブルの主キーまたはnull$foreignKeys: ForeignKey[]
– テーブルの外部キーの配列
カラム
テーブルのcolumns
プロパティは、キーがカラム名、値が以下のプロパティを持つColumnインスタンスであるカラムの連想配列を提供します:
$name: string
– カラム名$table: ?Table
– カラムのテーブルへの参照$nativeType: string
– ネイティブデータベース型$size: ?int
– 型のサイズ/長さ$nullable: bool
– カラムがNULLを含むことができるかどうか$default: mixed
– カラムのデフォルト値$autoIncrement: bool
– カラムが自動インクリメントであるかどうか$primary: bool
– 主キーの一部であるかどうか$vendor: array
– 特定のデータベースシステムに固有の追加メタデータ
インデックス
テーブルのindexes
プロパティは、各インデックスが以下のプロパティを持つIndexインスタンスであるインデックスの配列を提供します:
$columns: Column[]
– インデックスを構成するカラムの配列$unique: bool
– インデックスが一意であるかどうか$primary: bool
– 主キーであるかどうか$name: ?string
– インデックス名
テーブルの主キーはprimaryKey
プロパティを使用して取得でき、これはIndex
オブジェクトまたはテーブルに主キーがない場合はnull
を返します。
外部キー
テーブルのforeignKeys
プロパティは、各外部キーが以下のプロパティを持つForeignKeyインスタンスである外部キーの配列を提供します:
$foreignTable: Table
– 参照されるテーブル$localColumns: Column[]
– ローカルカラムの配列$foreignColumns: Column[]
– 参照されるカラムの配列$name: ?string
– 外部キー名