2011-12-05 12 views
0

多対多テーブルで作業していて、レコードを取得できなかった問題を修正しました。今、私はそれが必要なときにレコードを削除しようとしています。関連付けられたテーブルからレコードを削除する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" /> 

私は子が既に追加されている場合、複数のチェックボックスがチェックされています。

私は3つのテーブル(これは関連性があるかどうかわからない)持っている:私は私が私のeventChildrenテーブルに重複を追加しないことを確認するチェックをやっているレコードを保存すると

DB: 
- children 
- events 
- eventChildren 

を。レコードがすでにデータベースにあり、フォームから送信されていない場合は、子がリストから削除されていることがわかります。このサブセットをどのように捕捉するのか分かりません。

例コード:

// $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 
      )); 
     } 
    } 
} 

フォームが送信されると、私はeventId試合eventChildrenテーブルからすべてのレコードをつかむリターンを得ます。私はsubmittedChildren配列に基づいて、言うことができるどのよう

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レコードを削除しますか?

これは意味があると思います。 :)

答えて

0

これに(もっと良い方法で)アプローチする方法はたくさんありますが、私が提示した情報に基づいて簡単に答えを出すつもりです。

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

これらのより良い方法は何ですか?私が使用している現在の方法は、実際には働いていません.2つのIDが8と10の2つのIDを持っているからです。10が8のときは、等しくないので、新しいレコードを追加します。 – Seth

0

2つの項目の関係を削除しています(つまり、多対多表からの削除)。

通常、event_idフィールドとchild_idフィールドは、関係の識別(PRIMARY)キーになります。したがって、ユーザーが13のchild_idを送信し、event_idが4であるという文脈上の派生が可能であれば、child_id = 13およびevent_id = 4のeventChildrenテーブルからの削除で十分です。最初にeventChildrenオブジェクトに関する情報を収集する必要はありません(すでに識別情報があります)。

+0

良い点。 childId = xとeventId = xのeventChildrenから削除してください。重複を削除するので、これは難しくありません。 – Seth

+0

重複を防ぐために、これらの列(またはAUTO_INCRMENT列を持つ場合はUNIQUE)にPRIMARYキーが必要です。 – landons

+0

フォームが送信されるたびに、同じ子を同じイベント...を別の主キーIDで置き換えます。私はちょうど重複する関係をたくさん持っています。 – Seth

関連する問題