thinkphp多选删除

thinkphp6是一款非常优秀的PHP开发框架,它基于MVC架构,开发效率高、易上手、安全可靠,同时极大简化了代码编写的流程。今天,我们来谈一下使用thinkphp6实现多选删除的方法。

一、前言

多选删除是现代Web应用程序的常见功能之一。它允许用户在数据表格或列表中选择多个项目,然后可以删除它们。在这篇文章中,我们将介绍如何使用thinkphp6的控制器和模型来实现这个功能。

ThinkPHP快速多选删除教程

二、建立数据库

首先,我们需要在MySQL数据库中建立一个示例表。我们将使用命令行工具或phpMyAdmin来完成这个步骤。

CREATE TABLE example_table ( id int(11) NOT NULL AUTO_INCREMENT, name varchar(255) NOT NULL, email varchar(255) NOT NULL, PRIMARY KEY (id)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

这将创建一个名为“ example_table”的新表,其中包含id,name和email字段。

三、生成模型和控制器

接下来,我们需要根据上面创建的表结构来生成一个模型和一个控制器。

使用thinkphp6的Artisan命令行工具可以快速生成这些文件:

php think make:model ExampleModel --migration

运行上述命令将生成一个新的模型文件( app /Model/ExampleModel.php )和一个新的数据库迁移文件( database /migrations /yyyymmddhhmmss_create_example_model.php )。

php think make:controller ExampleController

运行上述命令将生成一个名为ExampleController.php的新文件( app /Controller/ExampleController.php )。

四、编写代码

现在我们已经准备好编写控制器代码来处理多选删除了。在控制器中,我们需要实现两个主要的action函数:index(用于显示所有数据)和delete(用于处理删除请求)。

在app /Controller /ExampleController.php文件中,添加以下代码:

<
?php
namespace appcontroller;


use think acadeView;

use thinkRequest;

use appmodelExampleModel;


class ExampleController
{
public function index()
{
$list = ExampleModel::all();


return View::fetch('index', [
'list' =>
$list,
]);

}

public function delete(Request $request)
{
$ids = $request->
param('ids');


foreach ($ids as $id) {
ExampleModel::destroy($id);

}

return ['status' =>
'success', 'message' =>
'删除成功'];

}
}

在上面的代码中,我们首先导入了类,并定义了两个函数index和delete。函数index用于从ExampleModel中获取所有数据,并将其传递到模板中。函数delete从HTTP请求中获取要删除的ID列表,并使用ExampleModel::destroy方法删除这些项目。

接下来,我们需要为模板添加一个多选框以及删除按钮。打开app /View /example /index.html文件,添加以下代码:

<
!DOCTYPE html>

<
html>

<
head>

<
meta charset="
UTF-8"
>

<
title>
Example<
/title>

<
/head>

<
body>

<
h1>
Example<
/h1>

<
table>

<
thead>

<
tr>

<
th>
<
input type="
checkbox"
id="
check-all"
>
<
/th>

<
th>
ID<
/th>

<
th>
Name<
/th>

<
th>
Email<
/th>

<
/tr>

<
/thead>

<
tbody>

<
?php foreach ($list as $item): ?>

<
tr>

<
td>
<
input type="
checkbox"
name="
ids[]"
value="
<
?php echo $item->
id ?>
"
>
<
/td>

<
td>
<
?php echo $item->
id ?>
<
/td>

<
td>
<
?php echo $item->
name ?>
<
/td>

<
td>
<
?php echo $item->
email ?>
<
/td>

<
/tr>

<
?php endforeach ?>

<
/tbody>

<
/table>

<
button id="
btn-delete"
>
删除<
/button>

<
script>

var btnDelete = document.querySelector('#btn-delete');

btnDelete.addEventListener('click', function () {
var ids = [];

var checkboxes = document.querySelectorAll('input[type=checkbox][name^=ids]:checked');

for (var i = 0;
i <
checkboxes.length;
i++) {
ids.push(checkboxes[i].value);

}
if (ids.length >
0) {
if (confirm('确定删除?')) {
var xhr = new XMLHttpRequest();

xhr.open('POST', '/example/delete');

xhr.setRequestHeader('Content-Type', 'application/json;
charset=UTF-8');

xhr.onload = function () {
var result = JSON.parse(xhr.responseText);

if (result.status == 'success') {
alert(result.message);

location.reload();

} else {
console.error(result);

alert('删除失败');

}
};

xhr.onerror = function () {
console.error(xhr);

alert('网络异常,请重试');

};

xhr.send(JSON.stringify({ids: ids}));

}
} else {
alert('请选择要删除的项目');

}
});

var checkAll = document.querySelector('#check-all');

checkAll.addEventListener('click', function () {
var checkboxes = document.querySelectorAll('input[type=checkbox][name^=ids]');

for (var i = 0;
i <
checkboxes.length;
i++) {
checkboxes[i].checked = checkAll.checked;

}
});

<
/script>

<
/body>

<
/html>

在上述代码中,我们使用了JavaScript来获取所有选中的多选框,并将这些ID传递给服务器的/delete路由。

五、测试

现在,我们可以打开控制台,使用以下命令将Web服务器启动起来。

php think run

然后在浏览器中输入localhost:8000/example,即可打开example的首页,点击多选框以选择要删除的项。最后点击删除按钮即可删除选择的项。

六、结论

在这篇文章中,我们使用thinkphp6的控制器,模型和视图来实现了多选删除的功能。这个功能可以在Web应用程序中发挥重要作用,优化应用程序的用户体验。



ThinkPHP是一个应用广泛的PHP开发框架,它拥有完备的文档和强大的功能,对于初学者和高级开发者而言都是一个不可多得的工具。但是,针对某些表格操作中的多选数据删除,很多开发者都会遇到诸如实现效率低、代码繁琐等问题。本文将为大家详细讲解一个高效、简便的ThinkPHP多选删除方法。
1. 多选删除原理与步骤
多选删除最基本的原理就是把要删除的数据ID传递给后端,后端通过循环依次删除即可。具体步骤如下:
(1)前端传递多选ID数组:将复选框选中的ID值通过ajax方式发送给后端;
(2)后端接收并循环删除:后端action方法中通过传递的ID值并引用ThinkPHP的框架类,使用delete方法删除数据;
(3)后端返回删除结果信息。
2. Ajax代码
首先,我们需要创建template页面HTML代码,通过Bootstrap的模态框形式来交互。以下是模态框HTML代码,其中保存和多选删除两个按钮使用的分别是'class’为‘btn btn-primary save’和‘btn btn-danger del’:
```






删除操作




确定要删除这些数据吗?










```
除了template页面部分的代码,我们还需要编写JS代码以及后端action代码。以下是JS代码,其中ajax发送的方法是‘POST’,url即指向的后端action代码:
```
/*多选删除*/
$('#multiDel').click(function(){
var arr = [];
$(':checkbox[name=id]:checked').each(function(i){
arr[i] = $(this).val();
});
console.log(arr);
if(arr.length == 0){
$.scojs_message('请选择数据!', $.scojs_message.TYPE_ERROR);
console.log('none selected');
return false;
}
$('#myModalDel').modal('show');
$('.del').click(function(){
$('#myModalDel').modal('hide');
$.ajax({
type:'post',
url:'./NewsList/delete',//后台php
data:{
id:arr
},
dataType:'json',
success:function(data){
console.log(data);
initList();
},
error:function(xhr,opt,err){
console.log(err);
}
});
})
});
```
3. Action代码
最后是整个多选删除功能的后端action代码,其中id是一组整数类型的数组,通过循环直接删除数据库中对应ID值的数据即可:
```
public function delete(){
$id = I('id/a');//至关重要的地方!!
$cond['id'] = ['in', $id];
$model = M('news');//索引数据表news
if($model->where($cond)->delete()){
$data = ['status'=>true, 'message'=>'删除成功!'];
} else {
$data = ['status'=>false, 'message'=>'删除失败!'];
}
$this->ajaxReturn($data, 'json');
}
```
综上所述,使用以上代码实现ThinkPHP多选删除功能是非常简单的,而且可扩展性也很强。大家只要清楚前端页面代码的意义,懂得如何发送ajax请求和将接收到的ID数组传给后端,再结合后端框架类和MySQL的删除语句就可以轻松实现多选删除功能了。