たとえばデータベースのお客様テーブルに「日別の通し番号を追加したい」なんてこと、よくありますよね。
CakePHPならbeforeSaveを使えば簡単です。
Visitor.php
// 省略 public function beforeSave() { // idが無ければ新規追加 if (empty($this->data['Visitor']['id']) && empty($this->data['id'])) { // no自動設定 $maxVisitorNo = $this->find('first', array( 'fields' => array( 'MAX(no) as max_no', ), // ↓ここがキモ 'conditions' => array( 'shop_id' => SHOP_ID, // 日付だけじゃなく店舗ごととかもできますね 'record_date' => date('Y-m-d'), // 当日の日付でチェック // 1ヶ月ごとなら下記でもOK。応用すれば週でも年でもできますね。 // 'record_date BETWEEN' => array(date('Y-m-1'), date('Y-m-t')), ), )); $nextVisitorNo = $maxVisitorNo[0]['max_no'] + 1; if (!empty($this->data['Visitor'])) { $this->data['Visitor']['no'] = $nextVisitorNo; } else { $this->data['no'] = $nextVisitorNo; } } return true; }
φ(..)メモメモ