我是OOPHP和CI的新手,所以我有一个简单的问题,对某些人来说可能是一个简单的答案。
我现在有一个表单,大约有100个复选框,所有复选框都有相同的名称,因此它们将作为一组数字提交。
我还有一个名为tag_restaurant_rel的表,它是一个设置为InnoDB的关系表,restaurant_id
和tag_id
都是与其他两个表中相应列相关的外键。
表单将与1 restaurant_id和几个tag_id一起提交。
在tag_restaurant_rel表中,数组中的每个tag_id都有一条记录,所有记录都来自表单中的相同restaurant_id。
我需要做的是提交表单,并且根据复选框值数组,tag_restaurant_rel表将需要删除不在数组中的记录,并为数组中的每个tag_id创建一条新记录。
我最感兴趣的是以最有效的方式来做这种OOP和CI风格。
答案 0 :(得分:2)
如果没有rag_restaurant_rel表的id或者id无关紧要(AI int或其他地方未引用的内容),我认为最简单的方法是擦除table_id = what的表格然后只是插入所有提交的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的兼容性如何。
您可能还会考虑首先添加POSTed标记(或在删除之前选择当前标记),这样如果插入时出现错误,则表格不会清除db中已有的所有标记(或者你可以恢复它们。)