cakephp habtm与输入而不是选择框的关系?

cakephp habtm与输入而不是选择框的关系?,cakephp,Cakephp,我正在用cakephp创建一个具有典型HABTM关系的表单。假设我正在开发一个带有优惠券代码的订单。从逻辑角度来看,我需要接受优惠券代码的文本条目,因此传入的数据不是正确的主键,而是不同的字段 然后,我需要验证该数据,并检索正确的主键id,然后使用该优惠券id和订单id更新orders\u优惠券表 当使用选择框时,该值将始终是正确的优惠券id,但我在哪里放置处理该逻辑的适当位置?我是否应该使用beforeSave修改数据?您的问题不太清楚b/c听起来您可以通过选择框或仅在自由格式文本框中指定优惠

我正在用cakephp创建一个具有典型HABTM关系的表单。假设我正在开发一个带有优惠券代码的订单。从逻辑角度来看,我需要接受优惠券代码的文本条目,因此传入的数据不是正确的主键,而是不同的字段

然后,我需要验证该数据,并检索正确的主键id,然后使用该优惠券id和订单id更新orders\u优惠券表


当使用选择框时,该值将始终是正确的优惠券id,但我在哪里放置处理该逻辑的适当位置?我是否应该使用beforeSave修改数据?

您的问题不太清楚b/c听起来您可以通过选择框或仅在自由格式文本框中指定优惠券


我倾向于向模型中添加一个新方法,用人类可读的键更新记录。因此,该函数将首先从数据库中读取优惠券id,然后进行更新。

如果我得到正确答案,这与标记几乎相同?!habtm项目有一个文本输入框,字符串提交给控制器时不带ID


如果是这样,我建议分割处理。将数据提交给控制器,然后将优惠券字符串传递给优惠券模型中的适当函数,该函数获取优惠券id并保存新项目,然后将它们返回给控制器以保存完整的habtm数据。

正如您所说,您只需查找优惠券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);
}

本质上,用户在优惠券代码中键入一个文本框no select,因为他们不应该选择优惠券代码。当他们手动输入代码时,模型需要知道它不是HABTM关系的ID,因此需要查找输入的优惠券代码,确定真正的主键,并将其保存到HABTM表中。对。因此,您将在模型中创建一个方法,如setCouponcode,它将假定您始终传入一个人类可读的优惠券代码,毕竟人类如何知道优惠券id?,并使用它查找真正的优惠券id,并将其保存到HABTM。