バーチャルフィールド(モデルの$virtualFields プロパティ)が便利。
CakePHP1.3から使えるモデルの$virtualFieldsプロパティを使ってみた。
ユーザーや会員のテーブルに『生年月日』を持っていて、『年齢』で検索したいときなんかにとっても便利。
mysql> desc members; +-------------+------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-------------+------------------+------+-----+---------+----------------+ | id | int(10) unsigned | NO | PRI | NULL | auto_increment | | name | varchar(32) | NO | | NULL | | | password | varchar(32) | NO | | NULL | | | birthday | date | NO | | NULL | | | created | datetime | NO | | NULL | | | modified | datetime | NO | | NULL | | +-------------+------------------+------+-----+---------+----------------+
こんなテーブルのモデルに、バーチャルフィールドage(年齢)を設定。
<?php class Member extends AppModel { var $name = 'Member'; var $virtualFields = array( 'age' => '(year(curdate()) - year(Member.birthday)) - (right(curdate(),5) < right(Member.birthday,5))' ); }
バーチャルフィールドageを使って、30歳以上の人を検索。
<?php $this->data = $this->Member->find( 'all', array( 'conditions' => array( 'Member.age >= ?' => 30, ), ) );
いやー、CakePHPは便利だなぁー。