我正在使用cakephp创建一个具有典型HABTM关系的表单。假设我正在开发一个带有优惠券代码的订单。从逻辑的角度来看,我需要接受优惠券代码的文本输入,因此传入的数据将不是正确的主键,而是一个不同的字段。
然后,我需要验证该数据,检索正确的主键id,然后使用该coupon_id和order_id更新orders_coupons表。
当使用选择框时,值总是正确的coupon_id,但是我应该把处理这个问题的逻辑放在哪里呢?我应该使用beforeSave修改数据吗?
发布于 2010-01-28 08:19:12
你的问题不是很清楚b/c听起来你们既可以通过选择框指定优惠券,也可以在自由格式的文本框中指定优惠券。
我倾向于向模型中添加一个新方法,该方法将使用“人类可读的键”更新记录。因此,该函数将首先从数据库中读取coupon_id,然后进行更新。
发布于 2010-01-28 17:04:26
如果我没弄错的话,这跟加标签差不多吗?!(有一个用于输入habtm项的文本输入框,字符串将不带ids提交给控制器)。
如果是这样的话,我会建议拆分处理。将数据提交给控制器,然后将优惠券字符串传递给优惠券模型中的适当函数,该函数获取优惠券in (保存新项目),并将它们返回给控制器以保存完整的habtm数据。
发布于 2010-01-28 18:06:20
就像你说的,你只需要查一下优惠券id...
// assuming $data looks like:
// array('Order' => array(...), 'Coupon' => array('code' => ...))
$coupon_id = $this->Order->Coupon->field('id', array('code' => $data['Coupon']['code']));
if (!$coupon_id) {
// user put in a non-existing coupon code, punish him!
} else {
$data['Order']['coupon_id'] = $coupon_id;
$this->Order->save($data);
}https://stackoverflow.com/questions/2151385
复制相似问题