Codeigniter删除查询不会删除行

时间:2018-11-27 15:39:02

标签: php codeigniter

我正在尝试从数据库中删除一行。删除后,正在显示的表应刷新并显示当前数据库(不删除行)。

控制器

public function delete()
    {
        $this->load->database();
        $this->load->model('userdetailModel');
        $id=$this->input->get('user_id');
        $this->userdetailModel->deleteOne($id);

        $data['results'] = $this->userdetailModel->viewAll();
        $this->load->view('userView', $data);

    }

视图

<?php 
        foreach($results as $res): ?>

        <tbody>
            <tr>
                <td><center><b><?php echo $res->user_id; ?></center></b></td>
                <td><center><?php echo $res->first_name; ?></center></td>
                <td><center><?php echo $res->last_name; ?></center></td>
                <td><center><?php echo $res->gender; ?></center></td>
                <td><center><a href=" <?= site_url('userController/view')?> "> View </a></center></td>
                <td><center><a href=" <?= site_url('userController/edit')?> "> Edit </a></center></td>
                <td><center><a href=" <?= site_url('userController/delete?id='.$res->user_id)?> "> Delete </a></center></td>

            </tr>

        </tbody>

    <?php endforeach; ?>
    </table>
    </center>
    } ?>

user_id是数据库中的字段名称。我遵循了一些源代码,但我做对了。请进一步向我解释这些代码块中缺少的内容。

型号

function viewAll() {

        $this->db->select('user_id, first_name, last_name, gender');
        $this->db->from('user_details');
        return $this->db->get()->result();
    }

function deleteOne($id)
    {
    $this->db->select('*');
    $this->db->from('user_details');
    $this->db->where('user_id', $id);
    $this->db->delete('user_details');

    }

3 个答案:

答案 0 :(得分:0)

您可以尝试:

 $this->userdetailModel->delete($id);

或:

$this->db->delete('userdetailModel', array('user_id' => $id)); 

或:

function deleteOne($id)
{
    $this->db->where('user_id', $id);
    $this->db->delete('user_details');
}

而不是:

$this->userdetailModel->deleteOne($id);

说明:

代码点火器查询构建器内置了delete方法。您可以从模型中调用它。无需具有“ deletoOne”功能。

在SQL中删除之前无需从('X')中进行选择('*')

源:

https://www.codeigniter.com/userguide3/database/query_builder.html#deleting-data

答案 1 :(得分:0)

首先,您需要在现有位置修复“删除”链接

<?= site_url('userController/delete?id='.$res->user_id)?>

在视图中,然后在控制器中要求输入user_id

$this->input->get('user_id');

您看到区别了吗?您设置了一个查询项目id=,但要求(获取)查询项目user_id。因此,您需要更改代码以使其匹配。这可能就是为什么什么都没有被删除的原因。您尚未获得ID值。

您可以考虑像这样在URI中传递id

<?= site_url('userController/delete/'.$res->user_id)?>

然后将控制器功能更改为此

public function delete($id)
{
    $this->load->database();
    $this->load->model('userdetailModel');
    $this->userdetailModel->deleteOne($id);

    $data['results'] = $this->userdetailModel->viewAll();
    $this->load->view('userView', $data);
}

请注意,$id现在是函数的参数,并且可以更容易地使用。

在模型的deleteOne函数中,您混合了一些任务。从表中删除时,不使用功能selectfrom

让模型函数返回一些东西是一个好主意,以便控制器知道一切是否正常工作。

function deleteOne($id)
{
    if(empty($id))
    {
        return false;  //oops, no data for 'where' to use
    }

    $result = $this->db
        ->where('user_id', $id)
        ->delete('user_details');

    return $result !== false;
}

请注意,我们正在检查传入的数据项$id。如果没有where()可以使用的数据,则运行查询没有任何意义。如果$idempty,则返回false。

function delete()将返回一个对象(类型为CI_DB_query_builder)或布尔值FALSE。因此,以上代码的最后一行将计算为布尔值,如果$result不为false,则为TRUE,否则为FALSE。

通过测试模型的返回值,您可以在出现问题或删除成功的情况下向您的视图发送消息-无论您认为如何。我将使用控制器中的模型返回给您。希望这会有所帮助。

答案 2 :(得分:0)

在模型中尝试以下查询:

function deleteOne($id){
return $this->db->where('user_id',$id)->delete('table_name');
}