ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

ActiveRecordのモデル(Model)クラスで、テーブル名を手動で調整したいとき($_tableNameメンバ変数)

えっと、Akelosのmodelのgeneratorは特にDBとか多分、見てないです。ですので、table名などは基本的にクラス名それ自体から生成している・・・筈です。すみません、AkActiveRecordのソース追ってみたのですが、正直追い切れませんでした。
getClassForDatabaseTableMapping()の中で

$class_name = get_class($this);
...
$class_name = $this->_getModelName($class_name);
...
@$this->setTableName(AkInflector::tableize($class_name), false);
...
return $class_name;

とあるので多分そうだと思うのですが・・・。

さておき、とにかく題名に対する結論としては、$_tableNameメンバ変数をオーバーライドします。

generatorで生成するmodelクラスもそうですが、AkActiveRecordクラスを継承しています。そこで、$_tableNameはデフォルトではnullになっています。その場合、AkActiveRecord#getTableName()メソッド中で前掲のgetClassForDatabaseTableMapping()が呼ばれてクラス名からテーブル名が生成されます。
というわけで、派生先のクラスで $_tableNameを初期設定しておくことで、テーブル名を手動で指定することが出来ます。

例:app/models/address_book.php :

<?php
class AddressBook extends ActiveRecord
{
    var $_tableName = 'address_book';
}
?>

といいますか、これで合ってるんでしょーか?ActiveRecordの流儀として、大体こんな感じで良いんですかね・・・?
なんかもう、Akelos側で用意してくれてるAPIとかXrefのオンラインHTMLとかも、あるのは良いのですが、文章として曖昧とか知りたい部分が無かったりして、結局ソースを読んだりしてます。JOINを使うようなSQLはADODB経由で全部SQLを自前で用意してますし・・・。