2011-05-13 7 views
1

저는 OOPHP와 CI에 대해 상당히 새롭기 때문에 사람들에게 쉬운 대답이 될 수있는 빠른 질문을했습니다.codeigniter 문제 - 체크 박스 그룹

나는 약 100 개의 체크 박스가 모두 같은 이름의 양식을 가지고 있으므로 숫자 배열로 제출할 것입니다.

또한 InnoDB로 설정되는 관계형 테이블 인 tag_restaurant_rel이라는 테이블이 있으며 restaurant_idtag_id은 두 개의 다른 테이블에있는 해당 열과 관련된 외래 키입니다.

양식은 restaurant_id와 여러 개의 tag_id로 제출됩니다.

tag_restaurant_rel 테이블에는 배열의 각 tag_id에 대한 레코드가 모두 양식의 restaurant_id와 같습니다.

내가 제출해야하는 것은 양식을 제출하는 것입니다. 확인란 값의 배열에 따라 tag_restaurant_rel 테이블은 배열에없는 레코드를 삭제하고 배열의 각 tag_id에 대한 새 레코드를 만들어야합니다 .

저는이 OOP 및 CI 스타일을 수행하는 가장 효율적인 방법으로 가장 궁금합니다.

답변

2

rag_restaurant_rel 테이블에 대한 ID가 없거나 id가 중요하지 않은 경우 (AI int 또는 다른 곳에서 참조되지 않은 항목), 가장 간단한 방법은 restaurant_id = 무엇이든지간에 테이블을 지우는 것입니다. 제출 된 모든 ID를 삽입하기 만하면됩니다.

저는 CI에 익숙하지 않고 데이터베이스와 어떻게 상호 작용하는지 모르겠습니다. 따라서 스크립트 측면에서 많은 정보가 없습니다. MySQL을 사용하고 있다면, 준비된 문장이 여러 삽입에 대해 매우 효율적이라고 생각합니다. 아마도 그렇게 될 것입니다. OOP에 관해서는 데이터베이스와의 상호 작용에 따라 1, 2 또는 3 가지 방법을 추가하는 것입니다. 같은

뭔가 :

public function updateRestaurantRelations($restId, $tagArray) 
{ 
//called from your script 
if($this->wipeCurrentTags($restId)){ 
    if($this->addNewTags($restId, $tagArray)){ 
     return true; 
    } 
} 
return false; 
} 
private function wipeCurrentTags($restId) 
{ 
//perform query here or call delete method 
//return true on success and false on failure 
} 
private function addNewTags($restId, $tagArray) 
{ 
//perform query here or build prepared statement loop here or call insert method 
//return true on success and false on failure 
} 

가 다시 내가 CI와 얼마나 호환이 될 것이라고 모른다.

POST 태그를 먼저 추가하거나 (삭제하기 전에 현재 태그를 선택하여) 삽입시 오류가 발생하면 이미 db에 있던 모든 태그를 지우지 않도록 할 수 있습니다 (또는 복원 할 수 있습니다).