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
)
)
と連想配列にセットされるので、適宜上手い具合に利用してください。という感じになります。