Php Codeigniter数据库删除和插入多个记录
我有一个与和稍有不同的问题。在我的模型类中,我必须将delete和save分离为两个不同的函数,如下所示Php Codeigniter数据库删除和插入多个记录,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一个与和稍有不同的问题。在我的模型类中,我必须将delete和save分离为两个不同的函数,如下所示 #save advanced preferences function savePreference($preferences){ $this->db->insert('bingo_advanced_preferences', $preferences); echo $this->db->last_query(); } #dele
#save advanced preferences
function savePreference($preferences){
$this->db->insert('bingo_advanced_preferences', $preferences);
echo $this->db->last_query();
}
#delete advanced preferences
function deletePreference($user_id,$criteria){
return $this->db->delete('bingo_advanced_preferences', array('bingo_user_id' => $user_id,'adv_criteria' =>$criteria));
}
如果我像这样从控制器调用这些函数,那么delete,update可以工作
//language preferences
if($this->input->post('language') && count($this->input->post('language')) > 0):
$this->Bingo_advanced_preferences->deletePreference($user,'15');
for ($i=0; $i < count($this->input->post('language')); $i++) {
$language_options = array(
'bingo_user_id' => $user,
'adv_criteria' => 15, //languages
'adv_criteria_value' => $this->input->post('language')[$i],
'adv_date_created' => date('Y-m-d H:i:s')
);
$this->Bingo_advanced_preferences->savePreference($language_options);
}
endif;
//语言首选项
如果($this->input->post('language')&&count($this->input->post('language'))>0):
$this->Bingo\u advanced\u preferences->deletePreference($user,'15');
对于($i=0;$iinput->post('language'));$i++{
$language\u options=数组(
“宾果用户id”=>$user,
“adv_标准”=>15,//语言
'adv_criteria_value'=>$this->input->post('language')[$i],
“adv_date_created”=>日期('Y-m-d H:i:s')
);
$this->Bingo\u advanced\u preferences->savePreference($language\u options);
}
endif;
然而,这并不适合这样一种情况,即有人取消选择所有内容,因此正确的顺序应该是这样的
$this->Bingo_advanced_preferences->deletePreference($user,'15');
if($this->input->post('language') && count($this->input->post('language')) > 0):
for ($i=0; $i < count($this->input->post('language')); $i++) {
$language_options = array(
'bingo_user_id' => $user,
'adv_criteria' => 15, //languages
'adv_criteria_value' => $this->input->post('language')[$i],
'adv_date_created' => date('Y-m-d H:i:s')
);
$this->Bingo_advanced_preferences->savePreference($language_options);
}
endif;
$this->Bingo\u advanced\u preferences->deletePreference($user,'15');
如果($this->input->post('language')&&count($this->input->post('language'))>0):
对于($i=0;$iinput->post('language'));$i++{
$language\u options=数组(
“宾果用户id”=>$user,
“adv_标准”=>15,//语言
'adv_criteria_value'=>$this->input->post('language')[$i],
“adv_date_created”=>日期('Y-m-d H:i:s')
);
$this->Bingo\u advanced\u preferences->savePreference($language\u options);
}
endif;
这只会删除adv_criteria=15的所有记录,并且从不更新(执行后续保存)。当然,我已经用if-else语句解决了我的问题,所以我的问题是为什么这不起作用?我们如何才能做到这一点?对于删除,您可以在查看文件时执行此操作,如
<input type='checkbox' name='tableId[]' value='<?php echo $value->tableId; ?>"'>
对于Insert,可以在视图文件上执行上述操作
然后在控制器上这样做
function delete_multiple() {
// Retrive Multiple Id List From Form
$check_id = $this->input->post('tableId[]');
// Multiple Delete Loop For Id
foreach($check_id as $checkId) {
$this->db->where('tableId', $checkId);
$this->db->delete('TableName');
}
}
function multiple_add() {
$table_Id = $this->input->post('tableId[]');
foreach($table_Id as $tableId) {
$data_some = array(
'tableId' => $tableId,
'blah' => $this->input->post('blah')
);
// Insert Data Function Call
$this->db->insert('TableName', $data_some);
}
}
我不理解最后一段中的这一部分——“这只会删除所有记录,从不更新”。我已经澄清了这个问题。好吧,让我试试,如果没有选择任何内容,随后就没有任何内容可保存。如果选择了某个内容,我看不出后续保存有任何问题。因此,在我看来,一切都很好:如果我错了,请纠正我。即使选择了不合理的内容,第二种安排也不会保存。代码似乎很好!它应该在理想情况下工作,检查是否有任何错误。我好像什么也没抓到。只有当保存的数据依赖于从数据库中删除的数据时,代码才会失败。在上面的代码中似乎不是这样。控制器中没有查询!它是一个“控制器”而不是一个“模型”。首先,正确掌握基本知识。