CakePHP database config.

DBをUTF-8で使いたくて、ハマッタ。

PHPから日本語データを送信して、ブラウザの表示とかはちゃんと見えてるから良しと思ってたら、その入力したデータが検索機能とかでは見つからない。コンソールで見ると文字化けしてた。phpMyAdminやコンソールからのMySQLのクエリでINSERTしてみると化けずにちゃんと格納する状態。どうやらPHPからMySQLへ向かう途中でコケてる様子だ。

あちこちさまよって結局ソースを見ると、app/config/database.phpで、送信するときのencodingを指定できるみたい。またCakePHPマニュアルに書いてないことをスルーしていたようで。

/* app/config/database.php */
var $default = array('driver' => 'mysql',
    'connect' => 'mysql_connect',
    'host' => 'my_host',
    'login' => 'my_name',
    'password' => 'my_pass',
    'database' => 'my_database',
    'encoding' => 'utf8',
    'prefix' => '');

SET NAMES fooでやってるようだ。文字コード辺りはまだまだ詳しく何やってるか分かってないけど、とりあえず良しとしとこう…か。今回もvar_dump()しまくった。

CakePHP HABTM

CakePHPのHasAndBelongsToManyのアソシエーションで、普通にモデルのSaveメソッドやったら既に持ってる関連がリセットされてしまう。マニュアルにあるような配列の入れ子を作って保存する際に、__saveMultiメソッドがデリートしてしまうようだ。

新しく関連を追加したり削ったりする場合は、こんな風にメソッドを追加してやったほうが良さそう。Alternative Methods for Working with hasAndBelongsToMany Associations | The Bakery, Everything CakePHP : Articles

今んとこ、やっぱりRailsの方が最初っから色々そろってんだなと思った。CakePHPも充分良いけど。

Core2 DuoのノートPC
九十九電機
Apple Store(Japan)