2013-07-29 62 views
1

我對(例如)名爲Message的模型有一個控制器操作。這非常簡單,並且允許系統記錄關於預訂發送的消息(模型稱爲預訂)。控制器發送電子郵件並將電子郵件的內容記錄到消息表中。一旦完成,我需要減少可用預訂的數量。cakephp saveField遞減或替代

$this->loadModel('Booking');     
$this->Booking->id = $bookingID; 
$this->Booking->saveField('booking_allotment', 'booking_allotment - 1'); 

上面的代碼是我到目前爲止,但它不起作用。而不是減少分配,它將它設置爲0.如果我硬編碼一個數字,它將用該硬編碼數字更新。

這個問題其實有兩個部分。首先,我從閱讀文檔和研究中獲得的解決方案比我需要的更加複雜。我明白,通過包括...

$this->loadModel('Booking'); 

...我將運行我不需要以及它根本不工作的表之間的所有關係。

如果我不使用蛋糕,UPDATE查詢將會非常簡單。是否有更簡單的替代方案可以起作用?或者,如果沒有,任何人都可以幫助我實現我需要做的事情?我正在使用cakePHP 2.3

+0

如果你明白你正在破壞你的關係 - 那你爲什麼要這麼做? – pudelhund

+0

你想用'booking_allotment - 1''實現什麼?您是否嘗試減少在booking_allotment字段中設置的值? – pudelhund

回答

1

如果我不使用蛋糕,UPDATE查詢將會非常簡單。

使用CakePHP更簡單... CakePHP不是問題。你的問題是(真的)「小菜一碟」。你想爲遞減的可用預訂的整數值,但您嘗試將一個字符串存儲在表中的字段:

$這個 - > Booking-> saveField(「booking_allotment」,「booking_allotment - 1」 );

我猜「0」值會自動存儲由於一個不可解決的類型問題。您應該使用Model $ validate變量真正驗證您的字段。

其次,loadModel調用始終避免:90%的時間用於解決由錯誤問題分析引起的問題。例如,這裏就是我被你的具體情況猜測...

你應該有:

1. a "Package" model for all the available offers (Package hasMany Booking/AvailableBooking) 
2. a "Booking" model for all the user's bookings (Booking belongs to Package/hasMany Message) 
3. a "AvailableBooking" model for the available Booking number for the current month/week/anything-else (dependent on your customer's needs) 
4. a "Message" model for your Booking communications 

定義模型之間的關係,你,你應該從其他控制器訪問與此語句(例如):

$this->Package->Booking->find(); 
$this->Package->Booking->Message->find(); 
$this->Message->Booking->find(); 

我真的建議你閱讀CookBook,付出更多的關注(http://book.cakephp.org/2.0/en/getting-started.html)。

讓我們結束這個帖子解決您的問題...

1. Set the Booking id as you did... 
2. Read the field that contains the value you're searching for... and decrement it 
3. Save the decremented field value 

$this->Booking->id = $id; 
$this->Booking->saveField('your_field', $this->Booking->field('your_field') - 1); 

編碼快樂!