Zend_Db_TableでO/Rマッピング -準備編
Zend Frameworkに同梱されているZend_Db_Tableを使ってO/Rマッピングにチャレンジしてるが不慣れなため、
まだまだ使いこなせていない。
現時点で、Zend_Db_Tableを使って実現できた事と、実現できていない事を簡単にまとめておく。
[DB設計]
架空のECサイトで商品テーブル、商品画像テーブル、カテゴリーテーブル、カテゴリーと商品の関連付けテーブルの4つ。
# 商品テーブル # image_idがサムネイル画像を指定 # デフォルトは画像テーブルのID:1がセットされる CREATE TABLE item ( id INTEGER PRIMARY KEY AUTOINCREMENT , name VARCHAR(255) NOT NULL , detail TEXT , stock INTEGER NOT NULL , price INTEGER DEFAULT 0 NOT NULL , image_id INTEGER DEFAULT 1 NOT NULL , del_flg INTEGER DEFAULT 0 NOT NULL ); # 画像テーブル # 1番目のレコードにはNOW PRINTINGの画像が保存されている CREATE TABLE image ( id INTEGER PRIMARY KEY AUTOINCREMENT , item_id INTEGER NOT NULL , file_name VARCHAR(255) NOT NULL , alt VARCHAR(255) , type VARCHAR(50) NOT NULL , del_flg INTEGER DEFAULT 0 NOT NULL ); # カテゴリーテーブル CREATE TABLE category ( id INTEGER PRIMARY KEY AUTOINCREMENT , name VARCHAR(255) NOT NULL , detail TEXT , del_flg INTEGER DEFAULT 0 NOT NULL ); # カテゴリーと商品の関連付けテーブル CREATE TABLE category_relation ( id INTEGER PRIMARY KEY AUTOINCREMENT , item_id INTEGER NOT NULL , category_id INTEGER NOT NULL , del_flg INTEGER DEFAULT 0 NOT NULL );
[やりたい事]
- Zend_Db_Tableを使ってカテゴリに所属している商品一覧を取得する
- ページング処理もする
- もちろん、SQLは一切、書かない
- 準備その1:テーブルクラスの定義
- $_nameにテーブル名
- $_primaryにそのテーブルの主キーを設定
- $_referenceMapには他テーブルへの参照を定義
- array("ルール名"=>array("columns"=>"参照キー","refTableClass"=>"テーブルクラス","refColumns"=>"外部キー"))
<?php /* * 商品テーブル * */ class ItemTable extends Zend_Db_Table_Abstract{ protected $_name="item"; protected $_primary = "id"; // 商品テーブルのimage_idと画像テーブルのidを関連付ける protected $_referenceMap = array( "Image" => array("columns"=>array("image_id"), "refTableClass" =>"ImageTable", "refColumns" =>array("id")) ); } /* * 画像テーブル * */ class ImageTable extends Zend_Db_Table_Abstract{ protected $_name="image"; protected $_primary = "id"; } /* * カテゴリーテーブル * */ class CategoryTable extends Zend_Db_Table_Abstract{ protected $_name="category"; protected $_primary = "id"; } /* * カテゴリーと商品の関連付けテーブル * */ class CategoryItemTable extends Zend_Db_Table_Abstract{ protected $_name = "category_relation"; protected $_primary = "id"; // 関連付けテーブルのitem_idと商品テーブルのidを関連付ける // 関連付けテーブルのcategory_idとカテゴリテーブルのidを関連付ける protected $_referenceMap = array( "Item" => array("columns" => array("item_id"), "refTableClass" => "ItemTable", "refColumns" => array("id") ), "Category" => array("columns" => array("category_id"), "refTableClass" => "CategoryTable", "refColumns" => array("id") ) ); } ?>
準備はここまで。実践編は次のエントリーで。
PHPフレームワーク Zend Framework入門
posted with amazlet at 08.12.05