我正在尝试从数据库中删除一行。删除后,正在显示的表应刷新并显示当前数据库(不删除行)。
控制器
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>
} ?>
型号
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');
}
答案 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
函数中,您混合了一些任务。从表中删除时,不使用功能select
和from
。
让模型函数返回一些东西是一个好主意,以便控制器知道一切是否正常工作。
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()
可以使用的数据,则运行查询没有任何意义。如果$id
为empty,则返回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');
}