DB_Table_Generator クラスのチュートリアル

DB_Table_Generator クラスのチュートリアル – 既存のデータベース用のコードの生成

Description

DB_Table_Generator クラスは、DB_Table パッケージを用いて既存のデータベースを操作するためのコードを生成するためのものです。 これは、データベース内の全テーブルに対する DB_Table のサブクラスの雛形を作成します。テーブルのスキーマは、 データベースに問い合わせることによって取得します。 また、データベースに接続するためのコードや DB_Table_Database オブジェクトを作成するためのコードも含めることができます。

命名規約とファイル構成

DB_Table_Generator オブジェクトが生成するすべてのコードは、 そのオブジェクトの $class_write_path プロパティで指定したディレクトリに書き込まれます。 デフォルトでは、これはカレントディレクトリになります。 デフォルトでは、たとえば 'thing' テーブル用に作成するクラスの名前は Thing_Table となります。 つまり、テーブル名の先頭を大文字にし、最後に '_Table' をつけたものがクラス名になるということです。 この最後につける文字列については $class_suffix プロパティで変更することができます。 このクラス定義を含むファイルの名前は、クラス名に拡張子 php をつけたものになります。 つまり、たとえば 'Thing_Table.php' のようになるということです。 このサブクラスから作成するインスタンスの名前は、テーブル名と同じになります。 つまり、たとえば 'thing' のようになります。

コード生成の手順

データベース $database の全テーブル用のコードを生成するには、 まず DB あるいは MDB2 のオブジェクトを $conn という名前で接続してデータベースに接続し、次のコードを実行します。

データベース全体用のコードの生成

<?php
require_once 'DB/Table/Generator.php';

// [省略] ここで、DB あるいは MDB2 オブジェクトを $conn という名前で作成します

// Generator オブジェクトのインスタンスを作成します
$generator = new DB_Table_Generator($conn$database);

// 生成したコードの保存先ディレクトリを選択します
$generator->class_write_path '/var/www/html/app1/db_table' ;

// DB_Table のサブクラスを定義するファイルを作成します
$generator->generateTableClassFiles();

// 'Database.php' ファイルを作成します
$generator->generateDatabaseFile();

?>

上の例では、すべてのコードが '/var/www/html/app1/db_table' (最後のディレクトリ区切り文字は不要) に書き込まれます。 このディレクトリが存在しない場合は、(可能なら) ディレクトリを作成します。 ディレクトリがすでに存在する場合、既存のファイルの上書きは行いません。 $class_write_path が設定されていない場合 (たとえばサンプルでこの行を削除した場合) は、 すべてのコードがカレントディレクトリに書き込まれます。

generateTableClassFiles() メソッドは、 各テーブル用のサブクラス定義の雛形を生成します。 テーブルごとに個別のファイルに書き込まれます。 上のように引数を指定せずにコールした場合は、 そのデータベース内のすべてのテーブルのサブクラス定義を生成します。

generateDatabaseFile() メソッドは 'Database.php' という名前のファイルを生成します。 デフォルトでは、ここにはデータベースへの接続用のコードや親の DB_Table_Database オブジェクトの作成用のコードが書き込まれます。 generateDatabaseFile() メソッドを上の例のようにコールする場合は、 generateTableClassFiles() の後にコールしなければなりません。 'Database.php' ファイル内のコードでは、 ("require_once" を使用して) 各テーブル用のサブクラスの定義を読み込み、 個々の DB_Table サブクラスのオブジェクトを作成 (ひとつのテーブルごとにひとつのオブジェクト) し、さらに親の DB_Table_Database オブジェクトのインスタンスを作成し、 すべてのテーブルを親に追加し、カラム名にもとづいた外部キーリレーションを推測します。 一般に、このファイルには多少手を加える必要があります。 つまり、データソース名 (DSN) を指定したり 自動判別に失敗した外部キーリレーションを指定したりといったことです。

デフォルトでは、generateTableClassFiles() および generateDatabaseFiles() はデータベース内の全テーブル用のコードを生成します。 特定のテーブル用のコードのみを生成させるには、パブリックプロパティ $tables にテーブル名の一覧を指定してからこれらのメソッドをコールします。 たとえば、 'table1'、'table2' および 'table3' の 3 テーブルについてのコードを生成するには、次のようにします。

指定したテーブル用のコード生成

<?php
require_once 'DB/Table/Generator.php'

// [省略] ここで、DB あるいは MDB2 オブジェクトを $conn という名前で作成します

// Generator オブジェクトのインスタンスを作成します
$generator = new DB_Table_Generator($conn$database);

// 生成したコードの保存先ディレクトリを選択します
$generator->class_write_path '/var/www/html/app1/db_table' ;

// テーブルを指定します
$generator->tables = array('table1''table2''table3');

// DB_Table のサブクラスを定義するファイルを作成します
$generator->generateTableClassFiles();

// 'Database.php' ファイルを作成します
$generator->generateDatabaseFile();

?>

generateTableClassFiles() をコールした時点で DB_Table_Generator オブジェクトのプロパティ $tables に配列が設定されていない場合は、 generateTableClassFiles() メソッドはデータベースに問い合わせて全テーブルの一覧の配列を取得し (内部で getTableNames() メソッドをコールします)、 $table プロパティにその内容を設定します。

リレーショナルデータベースへのインターフェイス (Previous) DB_Table のカラム定義で使用する抽象データ型 (Next)
Last updated: Wed, 16 Apr 2014 — Download Documentation
Do you think that something on this page is wrong? Please file a bug report or add a note.
View this page in:

User Notes:

Note by: nozimica
I've tested this generator with PostgreSQL and DB, and the size of fields such as varchars are not recoginzed.
Instead, it is better to use MDB2, which makes the reverse engineering well in this issue.