Codeigniter数据库删除并插入多个记录

时间:2016-06-11 02:42:41

标签: php mysql codeigniter

我的问题与thisthis略有不同。在我的模型类中,我必须将删除和保存分成两个不同的函数,如下所示。

  #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));

}

如果我从控制器调用这些函数,就像这样删除,更新工作。

 //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->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;

这只会删除adv_criteria = 15且永远不会更新的所有记录(执行后续保存)。当然我用if else语句解决了我的问题所以我的问题是为什么这不起作用?我们怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

对于删除,您可以在

等视图文件上执行此操作
Enumerable.Range(0, 1000)
    .GroupBy(i => i % 2)
    .Select(p => p.Key == 1 ? p.Reverse() : p)
    .OrderByDescending(p => p.Key)
    .SelectMany(p => p);

然后在这样的控制器上

<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');
        }
}