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( &amp;$db ) {
    $db->add( '', 'localhost', 'account', 'password', 'dbname' );
}

function config_models( &amp;$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
        )
)

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