Удаление записей из связанной таблицы PHP - PullRequest
0 голосов
/ 05 декабря 2011

Я работаю над таблицей «Многие ко многим», и я исправил проблему, из-за которой я не мог получить записи. Теперь я пытаюсь удалить записи, когда это необходимо.

У меня есть сайт, где дети могут быть связаны с событием. В случае, если ребенок был случайно добавлен, я хочу иметь возможность удалить ребенка. Они добавляются через флажок следующим образом:

<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 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, где совпадает eventId.

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

Как можно сказать, на основе массива submittedChildren удалить запись, где eventChildrenId = 3?

Надеюсь, это имеет смысл. :)

Ответы [ 2 ]

0 голосов
/ 05 декабря 2011

Просто чтобы прояснить, вы удаляете связь между этими двумя элементами (т.е. удаляете из таблицы «многие ко многим»)?

Обычно поля event_id и child_id являются идентифицирующим (ПЕРВИЧНЫМ) ключом в отношении. Следовательно, если пользователь отправляет child_id, равный 13, и вы можете контекстно определить, что event_id равен 4, тогда достаточно удаления из таблицы eventChildren, где child_id = 13 и event_id = 4. Вам не нужно сначала собирать информацию об объекте eventChildren (у вас уже есть идентифицирующая информация).

0 голосов
/ 05 декабря 2011

Есть много способов приблизиться к этому (лучшие способы), но я просто собираюсь пойти с прямым ответом, который я могу дать, основываясь на информации, которую вы представили.

$orphaned = array();
foreach ($currentChildren as $currChild) {
    if (!in_array($currChild->childId, $submittedChildren)) {
        $orphaned[] = $currChild->childId;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...