0
我正在使用Cakephp並試圖加入一種方法來確保我們的預訂系統不會讓兩個用戶預訂相同的約會。防爆。用戶1打開約會,用戶2同時打開它。用戶1預約該預約。用戶2試圖預訂它,但系統檢查並發現它不再可用。如何避免在保存數據時出錯 - Cakephp
我想這會發生在驗證,或beforeSave(),但不知道如何去做。
現在我在模型中做了一個函數來從控制器調用。在控制器中,我有:
if ($this->Timeslot->checkIfNotAvailable()) {
$this->Session->setFlash('This timeslot is no longer available');
$this->redirect(array('controller' => 'users', 'action' => 'partner_homepage'));
}
,並在模型中我有這樣的功能:
function checkIfNotAvailable($data) {
$this->recursive = -1;
$timeslot = $this->find('all', array(
'conditions' => array(
'Timeslot.id' => $this->data['Timeslot']['id'])
)
);
if ($timeslot['student_id'] == 0) {
//They can reserve it, do not spring a flag
return false;
} else {
//Throw a flag!
return true;
}
}
我覺得我混了使用自定義的驗證,當它不叫了。這顯然不起作用。有什麼建議麼?
謝謝!
您好史提夫,謝謝您的建議。我的方式現在不能正常工作......你看到我在用這種方法做什麼時會出現任何錯誤? – tnichols 2011-05-04 00:26:50
我會嘗試你現在的建議。 – tnichols 2011-05-04 00:27:01
您的嘗試可能失敗,因爲您正在使用'find('all')'這將返回整個記錄數組,這使得無法測試'$ timeslot ['student_id']'。 試着將它切換到一個'find('first')',你可能沒問題。 – stevecomrie 2011-05-04 02:26:35