我正在研究多对多表格,我修复了一个无法提取记录的问题。现在我正在尝试在需要时删除记录。
我有一个网站,儿童可以与某个活动相关联。如果孩子被意外添加,我希望能够移除孩子。它们通过Checkbox添加如下:
<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
?
我希望这是有道理的。 :)
答案 0 :(得分:0)
有很多方法可以解决这个问题(更好的方法),但我只是根据你提供的信息给出一个直截了当的答案。
$orphaned = array();
foreach ($currentChildren as $currChild) {
if (!in_array($currChild->childId, $submittedChildren)) {
$orphaned[] = $currChild->childId;
}
}
答案 1 :(得分:0)
为了清楚起见,你要删除两个项目之间的关系(即从多对多表中删除)?
通常,event_id和child_id字段将成为关系中的标识(PRIMARY)键。因此,如果用户提交的child_id为13,并且您可以在上下文中派生出event_id为4,则从eventChildren表中删除child_id = 13和event_id = 4就足够了。您不需要首先收集有关eventChildren对象的信息(您已经拥有识别信息)。