PHPマニュアル/PEARマニュアル | ユーザフォーラムで議論/質問 | マニュアル検索 | ハイライト | ハイライトオフ | ポータル | php spot

DB_Table_Generator クラスのチュートリアル | JavaScript入門&応用&リファレンスなら「JavaScriptist」

  

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 プロパティにその内容を設定します。

忘却曲線を使ってこの知識を確実に記憶に残す

フォーラムで「DB_Table_Generator クラスのチュートリアル」について話す
各種マニュアル: PHPマニュアル | PEARマニュアル | Smarty(英語)マニュアル | PHP-GTKマニュアル | DB_Table_Generator クラスのチュートリアル」をGoogle検索
copyright © 1997-2024 PHP ドキュメント作成グループ(ライセンス). provided by php spot. マニュアル: