ECサイト運営開発記

PHPフレームワーク Laravelの使い方を中心とした通販サイトの開発日記

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")
             )
 );
}
?>

準備はここまで。実践編は次のエントリーで。

Zend Framework徹底入門
Zend Framework徹底入門
posted with amazlet at 08.12.05
山田 祥寛
翔泳社
売り上げランキング: 22652

PHPフレームワーク Zend Framework入門
藤野 真吾
ソーテック社
売り上げランキング: 28867