CodeIgniter Active Record 一次删除多条记录

Posted

技术标签:

【中文标题】CodeIgniter Active Record 一次删除多条记录【英文标题】:CodeIgniter Active Record Delete Multiple Records At Once 【发布时间】:2015-01-04 19:08:34 【问题描述】:

这是我的控制器功能之一。它从名为“users”的数据库表中获取所有行并将其放入数组中。然后它加载一个名为“deleteuser”的视图,其中包含传递的数组数据。

function deleteuser()



    $this->load->model('users');
    $employees['staff'] = $this->users->getStaff();
    $this->load->view('deleteuser', $employees);

在 deleteuser 视图中,有一个从数组生成的复选框类型输入。表单操作调用了一个名为 remove 的函数。

<form action="remove" method = "post">

<?php foreach($staff as $row): ?>
<div class="checkbox">
        <label>
        <input type="checkbox" name="delete[]" value="<?php echo $row->id ?>" />
        <?php echo $row->lastName . ", " . $row->firstName; ?>
        <br />
        </label> 

        <?php endforeach; ?>
        <br /> 
        <br />
        <input type="submit" name = "remove" value = "Delete" class = "btn btn-danger btn-lg pull-left" />

    </div>

remove 函数从输入中获取删除数组并将其传递给名为 deleteUser 的模型函数。

function remove()
    $data = $this->input->post('delete');

    $this->users->deleteUser($data);


现在我遇到了一些麻烦。下面是 deleteUser 的模型函数,但它给了我一个未定义的偏移量:1 错误。任何帮助将不胜感激。

function deleteUser($data)

    if ($data) 
        for ($i = 0; $i <= count($data); $i++)
        
        $this->db->where('id', $data[$i]);
        $this->db->delete('users');
        
    

【问题讨论】:

【参考方案1】:

虽然@DamienPirsy 的回答在解决您的问题方面是正确的,但我建议采用另一种方法。我会一次删除所有记录,而不是循环删除。这将最大限度地减少您对数据库的查询次数。

function deleteUser($data)

    if (!empty($data)) 
        $this->db->where_in('id', $data);
        $this->db->delete('users');
    

【讨论】:

【参考方案2】:

去掉等于=的符号,应该是

for ($i = 0; $i<count($data); $i++) 

您正在获取 1 个越界元素。即,如果 count($data) 为 4,则您正在循环:0 1 2 3 4(“计数次要或等于 4”),这确实是五个元素 :)

【讨论】:

以上是关于CodeIgniter Active Record 一次删除多条记录的主要内容,如果未能解决你的问题,请参考以下文章

Codeigniter Active Record 类插入

使用 CodeIgniter Active Record 语句

CodeIgniter Active Record 与常规查询

CodeIgniter Active Record 中的 SQL 注释?

动态 Active Record 查询中的 Codeigniter 括号

Where 子句 CodeIgniter 中的 Active Record 问题