自動生成とデータベーススキーマ
自動生成とデータベーススキーマ --
基底クラスの生成とデータベーススキーマ
自動生成 (createTables.php) が行うこと
SQL 構築ツールの本質的特長の一つは、
整数をチェックし文字列をエスケープする事ができるよう、
データベース構造のある程度の情報を持っていることです。
データベースのテーブル構造に問い合わせるためには、
いくつかの方法があります。
DB_DataObject は通常これらのうちの
最後の方法を採ります
(代わりに章の下の方を見てください)。
ファイルを読み込むために
parse_ini_file
関数を利用していますので、適度に高速に動作します。
しかしながら、使用する前に
DB_DataObject のセットアップが必要です。
DB_DataObjectのもう一つの主要なコンセプトは、
DB_DataObjectを継承したクラスをあなたが使用する
ということです。
このクラスは、全ての表に関連する処理を行います。
大規模なデータベース向けにこれらのクラスをセットアップすることは、
時間の浪費になる可能性があります。そのため、
createTables.php
ファイルが全てのクラスファイルの雛形を自動的に作成します。
自動生成を始めるために、pear/DB/DataObject/
ディレクトリに移動し、
c:\php4\php.exe createTables.php myconfig.ini
と打ち込んでください。これで設定ファイルを読み込み、
データ定義ファイルに沿って全ての基底クラスを生成します。
バージョン1.5からオプション "proxy = full"
が利用可能になりました。これにより、ini
ファイルや事前に生成されたクラスを利用しなくとも
DataObjects がオンザフライでクラスやスキーマを生成するようになります。
デフォルトのクラス定義
デフォルトで生成されるクラスは、このような感じです。
例 33-1生成された継承クラス
<?php
/*
* Table Definition for group
*/
class DataObjects_Grp extends DB_DataObject {
###START_AUTOCODE
/* the code below is auto generated do not remove the above tag */
var $__table='group'; // table name
var $id; // int primary_key
var $name; // string
var $grp_owner; // int
var $official; // string
var $street; // string
var $postcode; // string
var $city; // string
var $homepage; // string
var $email; // string
var $extra; // blob
/* Static get */
function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('DataObjects_Grp',$k,$v); }
/* the code above is auto generated do not remove the tag below */
###END_AUTOCODE
}
?>
|
|
クラスはテーブル名を定義し、
参照のためにいくつかのテーブルカラムに
コメントを付けています。また、
単一行をオブジェクトとして素早く取得するために利用できる
staticGet()
メソッドも追加しています。
また、###END_AUTOCODE
の後にテーブルに関連するコードを追加すべきです。
バージョン 1.6 以前では、__clone メソッドが生成されていましたが、
PHP5 では $x = clone($y); を使用するよう変更されましたので、
このメソッドは削除されました。
現在 DataObjects はダミー関数 clone を互換性のために
(もし必要であれば) 生成します。
データベーススキーマファイル
デフォルトで生成されるデータベース定義ファイルは以下のような感じで、
"schema_location"
設定オプションで定義されたディレクトリに配置され、
データベースと同じ名前が付けられます。
もし、データベースを改名する場合、
ファイルを再生成するか同じ名前に合わせる必要があります。
もし、データベーススキーマを変更する
(たとえば、カラムを追加したり型を変更する) 場合、
createTables.php を使用してスキーマファイルを再生成する必要があります。
今のところ、これは自動的には行われません
(が、そのうち追加されるかも知れません)。
このファイルは手で編集すべきではありません
(再生成されるときに全ての変更が失われるので) 。
設定オプション "sequence_{table} = key" を使用したり、
継承したクラスで sequenceKey() メソッドを定義することによって、
表のキーを上書きすることができます。
例 33-2データベース設定ファイル [group]
id = 129
name = 130
grp_owner = 129
official = 130
street = 130
postcode = 130
city = 130
homepage = 130
email = 130
extra = 130
[group__keys]
id = N |
|
このブロックは、表と2進加算 (1=integer,2=string,128=not null,
129=integer かつ not null) によるフィールドの型、
または各表のキーの一覧を示しています。
このファイルを編集する必要はありません。
スキーマファイル使用の代替案
スキーマファイルを使わないで DataObjects を使用することは可能で、
2つの手順で実現することができます。
この2つ目は、keys() と tables() のページで解説されています。
以下は、手で書いた schema.ini ファイルを使用しないクラスです。
これは、オブジェクト変数よりはメソッドの戻り値となるよう
設計されていますので、
print_r() の出力は余分な情報が含まれていないでしょう
(また、大きな結果セットをダンプしたときよりは小さいでしょう) 。
例 33-3手で書いた継承されたクラス
<?php
/*
* Table Definition for group
*/
class DataObjects_Grp extends DB_DataObject {
// you can define these yourself
var $__table='group'; // table name
var $id; // int primary_key
var $name; // string
var $grp_owner; // int
var $official; // string
var $street; // string
var $postcode; // string
var $city; // string
var $homepage; // string
var $email; // string
var $extra; // blob
// these are usefull to be consistant with a autogenerated file.
/* Static get */
function staticGet($k,$v=NULL) { return DB_DataObject::staticGet('DataObjects_Grp',$k,$v); }
// now define your table structure.
// key is column name, value is type
function table() {
return array(
'id' => DB_DATAOBJECT_INT,
'name' => DB_DATAOBJECT_STR,
'bday' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE,
'last' => DB_DATAOBJECT_STR + DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME,
'active' => DB_DATAOBJECT_INT + DB_DATAOBJECT_BOOL,
'desc' => DB_DATAOBJECT_STR + DB_DATAOBJECT_TXT,
'photo' => DB_DATAOBJECT_STR + DB_DATAOBJECT_BLOB,
);
}
// now define the keys.
function keys() {
return array('id');
}
}
?>
|
|