2011-12-05 3 views
0

Many Many 테이블에서 작업 중이며 레코드를 가져올 수없는 문제가 해결되었습니다. 이제는 필요할 때 레코드를 삭제하려고합니다.관련된 테이블에서 레코드 제거하기 PHP

나는 아이들이 사건과 관련 될 수있는 사이트를 가지고있다. 아이가 실수로 추가 된 경우 나는 아이를 제거 할 수 있기를 원합니다. 다음과 같이 확인란을 통해 추가됩니다.

<input type="checkbox" name="eventChildren[]" id="childId_12" /> 
<input type="checkbox" name="eventChildren[]" id="childId_13" /> 
<input type="checkbox" name="eventChildren[]" id="childId_14" /> 

나는 이미 자식이 추가 된 경우 미리 선택되는 여러 개의 확인란이 있습니다.

DB: 
- children 
- events 
- eventChildren 

나는 레코드를 저장

내가 내 eventChildren 테이블에 중복을 추가하지 마십시오 확인하기 위해 검사를하고 있어요 :

나는 세 개의 테이블 (이 관련이 있는지 확실하지 않습니다)가 있습니다. 레코드가 이미 데이터베이스에 있지만 폼에서 제출되지 않은 경우 자식이 목록에서 제거되는 경우 ...이 하위 집합을 잡는 방법을 파악할 수 없습니다.

예제 코드 :

폼이 나는 eventChildren 테이블 eventId 경기에서 모든 기록을 잡고 수익을 얻을 제출
// $eventChildren comes from the form above name="eventChildren[]" 
// $eventId is passed into the function 

$currentChildren = $this->eventChildren->GetEventChildren(array('eventId' => $eventId)); 

// Loop through all submitted children 
foreach ($eventChildren as $childId) 
{ 
    // Loop through all existing children 
    foreach ($currentChildren as $currChild) 
    { 
     // If the child ID's do not match then it's a new record 
     if ($currChild->childId != $childId) 
     { 
      $this->eventChildren->AddEventChildren(array(
       'eventId' => $eventId, 
       'childId' => $childId 
      )); 
     } 
    } 
} 

.

eventChildren (return) 
- [0] 
    eventChildrenId => 1 
    childId => 12 
    eventId => 4 
- [1] 
    eventChildrenId => 2 
    childId => 13 
    eventId => 4 
- [2] 
    eventChildrenId => 3 
    childId => 14 
    eventId => 4 

submittedChildren 
- [0] => 12 
- [1] => 13 

어떻게 기록 eventChildrenId = 3를 제거 submittedChildren 배열을 기반으로 말할 수 있습니까?

나는 이것이 의미가 있기를 바랍니다. :)

답변

0

이 방법에 접근하는 데는 여러 가지 방법이 있지만, 내가 제시 한 정보를 토대로 줄 수있는 정직한 대답으로 넘어갈 것입니다.

$orphaned = array(); 
foreach ($currentChildren as $currChild) { 
    if (!in_array($currChild->childId, $submittedChildren)) { 
     $orphaned[] = $currChild->childId; 
    } 
} 
+0

더 좋은 방법은 무엇입니까? 내가 사용하고있는 현재의 방법은 ID가 8과 10 인 두 ID가 있기 때문에 실제로 작동하지 않습니다. 10이 8 일 때 8은 동일하지 않으므로 새 레코드를 추가하고 그 반대의 경우도 마찬가지입니다. – Seth

0

두 항목 간의 관계를 삭제하고 있습니다 (즉, 다 대다 테이블 삭제).

일반적으로 event_id 및 child_id 필드는 관계에서 식별 (PRIMARY) 키입니다. 따라서 사용자가 13의 child_id를 제출하고 event_id가 4라는 것을 문맥 적으로 유도 할 수있는 경우 child_id = 13 및 event_id = 4 인 eventChildren 테이블에서 삭제하면 충분합니다. eventChildren 객체 (이미 식별 정보가 있음)에 대한 정보를 먼저 수집 할 필요는 없습니다.

+0

좋은 지적. eventChildren에서 childId = x 및 eventId = x ...를 삭제하십시오. 중복을 제거하기 때문에이 작업이 어려워서는 안됩니다. – Seth

+0

중복을 방지하기 위해 해당 열 (또는 AUTO_INCRMENT 열이있는 경우 UNIQUE)에 PRIMARY 키가 있어야합니다. – landons

+0

양식을 제출할 때마다 같은 자식을 같은 것으로 묶을 때 문제가 발생했습니다. 이벤트 ... 다른 기본 키 ID. 나는 많은 중복 관계를 가질뿐입니다. – Seth

관련 문제