2013-07-29 29 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); 

编码快乐!