2010-01-28 2 views
0

일반적인 HABTM 관계가있는 cakephp에 양식을 만듭니다. 쿠폰 코드로 주문 양식을 개발한다고 가정 해 보겠습니다. 논리적 인 관점에서 볼 때 쿠폰 코드에 텍스트 입력을 허용해야하므로 들어오는 데이터는 적절한 기본 키가 아니라 다른 필드가됩니다.cakephp habtm 선택 상자가 아닌 입력이있는 관계?

그런 다음 해당 데이터의 유효성을 검사하고 올바른 기본 키 ID를 검색 한 다음 orders_coupons 테이블을 해당 coupon_id 및 order_id로 업데이트해야합니다.

선택 상자를 사용할 때 값은 항상 적절한 coupon_id이지만 논리를 처리 할 적절한 위치는 어디에 있습니까? beforeSave를 사용하여 데이터를 수정해야합니까?

답변

0

질문이 명확하지 않습니다. 선택 상자 나 무료 양식 텍스트 상자에서 쿠폰을 지정할 수있는 것처럼 들립니다.

"인간이 읽을 수있는 키"로 레코드를 업데이트하는 새로운 방법을 모델에 추가하는 것이 좋습니다. 따라서 함수는 먼저 DB에서 coupon_id를 읽은 다음 업데이트를 수행합니다.

+0

는, 사용자는 쿠폰 코드에 텍스트 상자 (No (아니오)를 선택 입력 쿠폰 코드 선택). 수동으로 코드를 입력 할 때 모델은 HABTM 관계에 들어오는 ID가 아님을 알아야하기 때문에 입력 된 쿠폰 코드를 조회하고 실제 기본 키를 결정한 다음 *에 *를 저장해야합니다 habtm 테이블. – helion3

+0

오른쪽. 따라서 setCouponCode (code)와 같은 모델에서 메소드를 작성하면 인간이 읽을 수있는 쿠폰 코드 (항상 인간이 coupon_id를 어떻게 알 수 있습니까?)를 전달했다고 가정하고이를 사용하여 실제 coupon_id를 찾습니다. HABTM에 저장하십시오. – mlathe

0

이 정보가 정확하다면 이것은 태그 지정과 거의 같습니다. (habtm 항목에 대한 텍스트 입력 상자가 있으며 문자열은 ID없이 컨트롤러에 제출됩니다).

그렇다면 처리를 분할하는 것이 좋습니다. 데이터를 컨트롤러에 제출 한 다음 쿠폰 문자열을 쿠폰 모델의 적절한 함수에 전달하고 쿠폰 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); 
}