2010-01-28 72 views
0

我在cakephp中創建了一個具有典型HABTM關係的表單。假設我正在使用優惠券代碼開發訂單。從邏輯角度來看,我需要接受優惠券代碼的文本輸入,所以傳入的數據不會是正確的主鍵,而是不同的字段。cakephp與輸入而不是選擇框的habtm關係?

然後我需要驗證該數據並檢索正確的主鍵ID,然後使用該coupon_id和order_id更新orders_coupons表。

當使用選擇框時,該值將始終是正確的coupon_id,但是我在哪裏放置邏輯來處理這個問題?我應該使用beforeSave修改數據嗎?

回答

0

你的問題不是很清楚b/c它聽起來像你可以通過選擇框或僅在一個自由形式的文本框中指定優惠券。

我的傾向是在模型中添加一個新的方法,用「人類可讀密鑰」更新記錄。所以這個函數首先會從DB讀取coupon_id,然後進行更新。

+0

從本質上講,用戶在優惠券代碼鍵入文本框(沒有選擇,因爲他們不應該能夠選擇優惠券代碼)。當他們手動輸入代碼時,模型需要知道它不是HABTM關係的ID,所以需要查找輸入的優惠券代碼,確定真正的主鍵,並將* *保存到habtm表。 – helion3 2010-01-28 00:33:25

+0

沒錯。所以你可以在模型中創建一個類似setCouponCode(code)的方法,它會假設你總是傳遞一個人類可讀的優惠券代碼(畢竟人們將如何知道coupon_id?),並使用它來找到真正的coupon_id,並且保存到HABTM。 – mlathe 2010-01-28 01:00:16

0

如果我得到這個正確的,這是幾乎相同的標籤?! (有一個用於habtm項目的文本輸入框,並且該字符串被提交給沒有ID的控制器)。

如果是這樣,我會建議分割處理。將數據提交給控制器,然後將優惠券字符串傳遞給優惠券模型中的適當功能,即獲取coupon-id(保存新項目)並將其返回給控制器以保存完整的habtm數據。

0

正如你所說,你只需要仰望的優惠券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); 
}