1

我对(例如)一个名为 Message 的模型有一个控制器操作。这非常简单,允许系统记录发送的有关预订的消息(模型称为预订)。控制器发送一封电子邮件并将电子邮件的内容记录到消息表中。完成后,我需要减少可用预订量。

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

上面的代码是我到目前为止所拥有的,但它不起作用。它不会减少分配,而是将其设置为 0。如果我硬编码一个数字,它将使用该硬编码的数字进行更新。

这个问题实际上有两个部分。首先,我从阅读文档和研究中得到的这个解决方案比我需要的要复杂。我明白,通过包括...

$this->loadModel('Booking'); 

...我将运行我不需要的表之间的所有关系,以及它根本不起作用。

如果我不使用 cake,UPDATE 查询将非常简单。有没有更简单的替代方案可以工作,或者如果没有,任何人都可以帮助我实现我需要做的事情吗?我正在使用 cakePHP 2.3

4

1 回答 1

1

如果我不使用 cake,UPDATE 查询将非常简单。

使用 CakePHP 更简单... CakePHP 不是问题。你的问题是(真的)“小菜一碟”。您想减少可用预订的整数值,但您试图在表字段中存储一个字符串:

$this->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);

快乐编码!

于 2013-07-30T10:16:46.337 回答