[php] DB::DataObject 事始め

とりあえず使うテーブルをでっちあげてみる。
とはいえ、最初から作るのも面倒なのでwww.l2rr.netで作ったリネージュ2のアイテム製作ツールのデータベースをさっくり流用。
データの中身もインポート。


データ構造は激しくてきとう:-P

テーブルはこんなの。


-- 
-- テーブルの構造 `cm_item`
-- 

CREATE TABLE `cm_item` (
  `id` int(11) NOT NULL auto_increment,
  `itemName` text NOT NULL,
  `itemDescription` text,
  `itemPrize` int(11) default '0',
  `categoryId` int(11) NOT NULL default '0',
  `recipe` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `key01` (`categoryId`,`id`)
) TYPE=MyISAM AUTO_INCREMENT=212 ;

-- --------------------------------------------------------

-- 
-- テーブルの構造 `cm_item_category`
-- 

CREATE TABLE `cm_item_category` (
  `id` int(11) NOT NULL auto_increment,
  `categoryName` varchar(100) NOT NULL default '',
  `categoryDescription` text NOT NULL,
  `isRecipe` int(11) NOT NULL default '0',
  `isMaterial` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=12 ;

-- --------------------------------------------------------

-- 
-- テーブルの構造 `cm_recipe`
-- 

CREATE TABLE `cm_recipe` (
  `id` int(11) NOT NULL auto_increment,
  `itemId` int(11) NOT NULL default '0',
  `level` int(11) NOT NULL default '0',
  `spendMP` int(11) NOT NULL default '0',
  `createCount` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `itemId` (`itemId`)
) TYPE=MyISAM AUTO_INCREMENT=58 ;

-- --------------------------------------------------------

-- 
-- テーブルの構造 `cm_recipe_detail`
-- 

CREATE TABLE `cm_recipe_detail` (
  `id` int(11) NOT NULL auto_increment,
  `itemId` int(11) NOT NULL default '0',
  `recipeId` int(11) NOT NULL default '0',
  `needCount` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`)
) TYPE=MyISAM AUTO_INCREMENT=235 ;

Objectスタブの作成

まずはObjectスタブを作ってみる
公式のヘルプ*1によればPear/DB/createTables.phpにiniの設定を食わせればいいようだ。

とりあえずiniを作ってみた。

[DB_DataObject]

database    = mysql://root:@localhost/DataObject
schema_location = /var/www/html/php/DataObject/DataObjects
class_location  = /var/www/html/php/DataObject/DataObjects
require_prefix  = DataObjects/
class_prefix    = DataObjects_
  • database
    DSNを指定。ここではユーザー名root パスワード空白でlocalhostmysqlのデータベース"DataObject"を使うように指定
  • schema_location
    スキーマの生成先フォルダを指定
  • class_location
    Objectスタブクラスの生成先を指定
  • require_prefix
  • class_prefix
    スタブクラス名のプレフィックスを指定

とりあえずこれで流してみる。

$ php /usr/share/pear/DB/DataObject/createTables.php `pwd`/items.ini
Content-type: text/html
X-Powered-By: PHP/4.3.11

<code><B>db_dataobject_generator: 0:</B> CREATING FOR DataObject
</code><BR>
<code><B>db_dataobject_generator: 0:</B> calling generatedefinitions</code><BR>
<code><B>db_dataobject_generator: 0:</B> Generating Definitions file:        </code><BR>
<code><B>db_dataobject_generator: 0:</B> Writing ini as /var/www/html/php/DataObject/DataObjects/DataObject.ini
</code><BR>
<code><B>db_dataobject_generator: 0:</B> calling generateclasses</code><BR>
<code><B>db_dataobject_generator: 0:</B> writing DataObjects_Cm_item
</code><BR>
<code><B>db_dataobject_generator: 0:</B> writing DataObjects_Cm_item_category
</code><BR>
<code><B>db_dataobject_generator: 0:</B> writing DataObjects_Cm_recipe
</code><BR>
<code><B>db_dataobject_generator: 0:</B> writing DataObjects_Cm_recipe_detail
</code><BR>
<code><B>db_dataobject_generator: 0:</B> writing DataObjects_Cm_warehouse
</code><BR>
<code><B>db_dataobject_generator: 0:</B> writing DataObjects_Cm_warehouse_detail
</code><BR>
<code><B>db_dataobject_generator: 0:</B> DONE

成功したくさい。