本当は、Doctrineのaskeetの続きを紹介しようと思ったのですが、まだバグが多く3日目の内容からうまく動いてくれなかったので、バージョンアップを待って再度チャレンジしたいと思います。今回の内容は、日付型カラムの取得についてです。
先日リリースされたばかりですが、symfonyの1.0.9にアップデートする際には若干注意が必要です。特に設定を行っていない場合、日付型のカラムを出力する際に表示が変わってしまう可能性があります。
symfonyの1.0.8までは、lib/model/omに生成されるモデルでは、日付型カラムがY-m-dとして出力されましたが、1.0.9ではロケールに従った出力になります。
どういうことかというと、PHPのソースコードでは、以下のように変わったということです。
<?php
// 1.0.8まで
date('Y-m-d');
// 1.0.9から
strftime('%x');
もし、setlocale(LC_ALL, 'ja_JP.UTF-8'); のようにロケールが指定されていると、「2007年12月03日」のように出力されます。表示する際はよいかもしれませんが、内部で使っている部分で日本語が含まれると困ったことになるでしょう。なお、デフォルトのロケールは以下のように調べることができます。
<?php
echo setlocale(LC_ALL, "0");
出力の中のLC_TIMEの設定で出力される内容が変わってきます。たとえば、LC_TIME=Cとなっている場合は、mm/dd/YYのようになります。
出力内容が変わってしまい、特にY-m-dを期待して呼び出したメソッドが日本語込みの文字列になっているとスクリプトが動かなくなることもあるでしょう。
もちろん、この挙動を変更することも可能です。そのためには、config/propel.iniに以下の行を追加します。
propel.defaultDateFormat = Y-m-d
これで、symfony propel-build-modelを実行すれば今までと同じようにY-m-dで日付が出力されるはずです。
その他のTIPSとしては、引数にnullを渡すことで、UNIXタイムスタンプ形式で日付を取得することができます。これも知っておくとかなり便利なので、知っておきましょう。