2010年1月27日水曜日

Zend_Db_Table(その3) テーブルクラスの定義

Zend_Db_Tableを継承したクラスを定義する。
対象となるテーブルが規約にクラス名と同じであり、主キーがシーケンスのように自動インクリメントすキーを持つテーブルであれば、クラス定義や具象クラスを利用するだけでで使用できる。

--------テーブル例--------
CREATE TABLE HOGE
(
ID SERIAL NOT NULL UNIQUE,
NAME TEXT,
PRIMARY KEY (ID)
) ;
CREATE TABLE HOGECHILD
(

CID SERIAL NOT NULL UNIQUE,
PARENT_ID INTEGER NOT NULL REFERENCES HOGE,
NAME VARCHAR(10) NOT NULL,
PRIMARY KEY (CID)
)
--------ここまで--------

--------コード例--------
class Hoge extends Zend_Db_Table_abstract{
}
$table=new Hoge();
$result=$table->find(1);//主キーによる検索
-------ここまで---------

(クラスを定義しない方法 1.9以上)
--------コード例--------
$table = new Zend_Db_Table('hoge');
-------ここまで---------

(テーブル名をクラス名と分ける場合)
--------コード例--------
class Hoge extends Zend_Db_Table_Abstract{
protected $_name="hoge";
}
-------ここまで---------

(主キーが自動インクリメントするキーの場合)
--------コード例--------
class Hoge extends Zend_Db_Table_Abstract{
protected $_sequence=true;
}
-------ここまで---------

(主キーが自然キーの場合)
--------コード例--------
class Hoge extends Zend_Db_Table_Abstract{
protected $_sequence=false;
}
-------ここまで---------

(プラリマリーキーを指定する場合)
--------コード例--------
class Hoge extends Zend_Db_Table_Abstract{
protected $_primary="id";
protected $_sequence=true;
}
-------ここまで---------


テーブル間の関係(リレーション)をクラスに定義しておくと、Zend_Db_Rowクラスから、親テーブルや子テーブルへのアクセスが簡単に利用できる。
テーブルに親、子供テーブルが存在する場合は、親、子に対する関係を記述する。

(従属するテーブルが存在する場合)
--------コード例--------
class Hoge extends Zend_Db_Table_Abstract{
protected $_sequence=true;
//テーブル名ではなく、Zend_Db_Tableを継承したクラス名を記述する
protected $_dependentTables=array(
'HogeChild'
);
}
-------ここまで---------

(親テーブルが存在する場合)
--------コード例--------
class HogeChild extends Zend_Db_Table_Abstract{
protected $_sequence=true;
//refTableClassの要素はテーブル名ではなく、Zend_Db_Tableを継承したクラス名を記述する
protected $_referenceMap=array(
'Rule1'=>array(
'columns'=>'parent_id',
'refTableClass'=>'Hoge',
'refColumns'=>'id'
)
);}
-------ここまで---------

0 件のコメント: