PHPフレームワーク「ちいたん」のちょっとしたTIPS
以前の記事で取り上げたPHPフレームワーク「ちいたん」ですが、小さいながらもなかなか面白いフレームワークなので、もう少しだけ遊んでみました。
そうした中で実際に試してみたり、ネット上を調べてみたりしたことを幾つかを、備忘録も兼ねてこの場に残しておこうかと思います。
大文字で始まるDBテーブルを操作する
前回の記事で大文字で始まるDBテーブルに接続できないらしい
としてた件ですが、「そんなことはないだろう……」ということで調べてみました。以下の方法で大文字で始まるDBテーブルを操作できます。
公式ページのモデルのページ最後に「変数」という小見出しの内容があるのですが、その中に
- var $name
何も指定されていない時(デフォルト)はファイル名のデータベースを自動的に指定します。 これを設定すると、指定されたテーブルにアクセスするようになります。
とあります。説明の通りなのですがモデルの中で、この$nameにテーブル名をセットすれば、DBテーブル名が大文字を含んでいても問題なく操作することが可能です。
具体的にはテーブル名 Items で、それを操作するモデル items.php があったとして、items.php は以下のように記述するだけでOKということです。
<?php class CItems extends CModel { var $name = 'Items'; } ?>
ちいたんでアソシエーションを使う
ちいたん標準ではアソシエーションに対応していませんが、
で紹介されているaddAssociationModel.phpを導入することでCakePHPライクにアソシエーションを利用することができるようになります。
利用方法については上記ページが詳しいのですが、例えば
CREATE TABLE `Feeds` ( `id` bigint(20) unsigned NOT NULL auto_increment, `url` varchar(100) NOT NULL default '', PRIMARY KEY (`id`), UNIQUE KEY `url` (`url`) ); CREATE TABLE `Items` ( `id` bigint(20) unsigned NOT NULL auto_increment, `feedid` bigint(20) NOT NULL default '0', `title` varchar(100) NOT NULL default '', `link` varchar(100) NOT NULL default '', `content` text NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `uri` (`link`) );
というDBテーブルがあったとして、ItemsテーブルのfeedidでFeedsテーブルとリレーションしているとします。これをちいたん+addAssociationModel.phpで定義するには以下のようにします。
まずconfig.php。モデル登録の前にaddAssociationModel.phpをrequireします。
<?php function config_database( &$db ) { $db->add( '', 'localhost', 'account', 'password', 'dbname' ); } function config_models( &$controller ) { require_once '/home/my-account/cheetan/addAssociationModel.php'; $controller->AddModel( "feeds.php" ); $controller->AddModel( "items.php" ); } ?>
次にitems.php。外部キーfeedidでリレーションしている旨を記述します。
<?php class CItems extends CAddAssociationModel { var $table = 'Items'; var $belongsTo = array( 'Feeds' => array( 'className' => 'CFeeds', 'conditions' => '', 'order' => '', 'foreignKey' => 'feedid' ) ); } ?>[/php この設定をして、コントローラ等で [php]$rec = $c->items->findone("id = 1"); print_r($rec);
としてみると、
Array ( [id] => 1 [feedid] => 1 [link] => http://www.example.jp/detail/001 [title] => Example [content] => Test Entry. [Feeds] => Array ( [id] => 1 [url] => http://www.example.jp/index.rdf ) )
と連想配列にセットされるので、適宜上手い具合に利用してください。という感じになります。