代码之家  ›  专栏  ›  技术社区  ›  helion3

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

  •  0
  • helion3  · 技术社区  · 14 年前

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

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

    当使用选择框时,该值始终是正确的优惠券ID,但我将逻辑放置在何处以处理此问题?我应该使用beforesave修改数据吗?

    3 回复  |  直到 14 年前
        1
  •  0
  •   mlathe    14 年前

    你的问题不是很清楚b/c,听起来你可以通过一个选择框或者一个自由格式的文本框来指定优惠券。

    我倾向于在模型中添加一种新方法,用“人类可读的密钥”更新记录。所以函数首先从数据库读取优惠券ID,然后进行更新。

        2
  •  0
  •   deceze    14 年前

    如你所说,你只需要查一下优惠券的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);
    }
    
        3
  •  0
  •   harpax    14 年前

    如果我得到了正确的答案,这和标签差不多吗?!(habtm项目有一个文本输入框,字符串不带ID提交给控制器)。

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