たとえばデータベースのお客様テーブルに「日別の通し番号を追加したい」なんてこと、よくありますよね。
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;
}
φ(..)メモメモ
