×

Sign in with twitter.

You can follow the user and hashtags.

Share your tips on social media.

Post relative tips.

If you have relative tips, click [Add relative tips] to post.

CakePHP2.0からFixtureでMySQLのMEMORYエンジンが使われる場合の回避方法

@cakephper@cakephper 4426 viewer 82 embed viewer embed
CakePHP Advent Calendar 2011 初日担当の @cakephper です。
今回はTipshareに記事を投稿します。
説明に使っているCakePHPは2.0.4です。


CakePHP2.0からbake fixtureすると、$fieldsプロパティに、tableParametersというキーがあって、そこでDBのエンジンが指定されています。
Fixutreファイルにスキーマ情報を書いていればよいのですが、defaultの既存のテーブルスキーマをインポートしてテストテーブルを作成する場合は、

$import = 'Article';

というように、インポート元のモデル名を指定しますが、エンジンの指定ができません。



よって、この場合は、 InnoDBじゃなくてMEMORYエンジンが使われます(MySQLの場合)。
オンメモリなのでDisk I/Oが発生せず高速に動作する利点はありますが、InnoDB特有の処理をテストしたい場合は問題になりますので、

class MyFixture extends CakeTestFixture
function create($db) {
$this->fields['tableParameters']['engine'] = 'InnoDB';
return parent::create($db)
}

というようなMyFixtureを作って、各FixtureはこのMyFixtureクラスを継承するようにすれば回避できます。

参考
http://groups.google.com/group/cake-php/browse_thread/thread/107ddbd05abf8bc?pli=1

#cakephp2.0 #CakephpAdvent2011

Click this to change format.

Add relative tips

Users who share this tip.

Comments