php - DELETE 在 Laravel 数据表中不起作用
问题描述
我正在使用 Laravel Datatable 并且我一直坚持下去。下面的代码用于删除 TagManagement 模型中的条目。但它并没有删除条目,更糟糕的是它没有显示任何错误。任何人都可以在下面的代码中找到错误吗?
看法
$(document.body).on("click",".remove-tag", function () {
var tag_id = $(this).data('id');
showConfirm("DELETE", "Do you want to delete this Tag ?","deleteTag("+tag_id+")");
});
function deleteTag(id){
$.ajax({
type: 'get',
url: '{!! url('delete-tag') !!}',
data: {tag_id: id},
success: function (data) {
if (data == "SUCCESS") {
$('[data-id="' + id + '"]').closest('tr').remove();
showAlert("SUCCESS","Delete Tag successful");
}
}, error: function (data) {
showAlert("FAIL","Delete Tag fail");
}
});
}
var tag_id = $(this).data('id');
showConfirm("DELETE", "Do you want to delete this Tag ?","deleteTag("+tag_id+")");
});
function deleteTag(id){
$.ajax({
type: 'get',
url: '{!! url('delete-tag') !!}',
data: {tag_id: id},
success: function (data) {
if (data == "SUCCESS") {
$('[data-id="' + id + '"]').closest('tr').remove();
showAlert("SUCCESS","Delete Tag successful");
}
}, error: function (data) {
showAlert("FAIL","Delete Tag fail");
}
});
}
控制器
public function destroy($id)
{
$tagManagement = TagManagement::find($id);
$deleted = $tagManagement->delete();
if ($deleted) {
return "SUCCESS";
} else {
return "FAIL";
}
}
public function loadTags()
{
$Tags = TagManagement::all();
return DataTables::of($Tags)
->addColumn('action', function ($tag) {
return '<a href="' . url('/tags/' . $tag->id . '/edit') . '" class="btn btn-default edit_btn_styles" data-toggle="tooltip" data-placement="top" title="Edit"><i class="fa fa-wrench" aria-hidden="true"></i></a>
<button type="button" data-id="' . $tag->id . '" class="btn btn-default remove-tag remove-btn" data-toggle="tooltip" data-placement="top" title="Delete"><i class="fas fa-trash-alt" aria-hidden="true"></i></button>';
})
->rawColumns(['action'])
->make(true);
}
}
**Route**
Route::get('/delete-tag', 'AdminPanel\TagController@destroy');
解决方案
您的路线和控制器方法似乎不对应。首先,最好使用“删除”HTTP 请求方法进行删除操作,但这不是导致您的问题的原因。
您将路由定义为,/delete-tag
但在控制器中,您希望将$id
a 作为方法的参数destroy
。为了让它工作,你需要有这样的路由,/delete-tag/{id}
并在前端相应地为你的 ajax 调用构造 URL。我很惊讶您没有Missing argument 1 for App\Providers\RouteServiceProvider::{closure}()
以这种方式错误地处理您的请求。
Laravel 文档很好地解释了如何使用参数定义路由。
如果您在问题中包含 Laravel 版本,将会很有帮助。
这是它应该如何工作的:
路线定义
Route::delete('/delete-tag/{id}', 'AdminPanel\TagController@destroy')->name('delete-tag');
JS函数
function deleteTag(id){
let route = '{!! route('delete-tag', ['id' => '%id%']) !!}';
$.ajax({
type: 'post',
url: route.replace('%id%', id);,
data: {_method: 'delete'},
success: function (data) {
if (data == "SUCCESS") {
$('[data-id="' + id + '"]').closest('tr').remove();
showAlert("SUCCESS","Delete Tag successful");
}
}, error: function (data) {
showAlert("FAIL","Delete Tag fail");
}
});
}
推荐阅读
- php - 如何在 API 平台上保存与实体的嵌套关系
- python - Pandas & Python:有没有办法导入excel文件的内容,在文件末尾添加文本内容,然后保存下来?
- python-3.x - 在 pytest 测试会话开始之前以编程方式查找 pytest 的根目录
- r - lapply 和 for 循环通过 R 中的 data.frames 列表运行函数
- git - 无法将文件推送到 Git
- php - 如何关联多个连接 CDbCriteria Yii 1.1
- excel - 是否可以使用 VBA 一次使用 (*.txt) 移动(一个文件夹到另一个文件夹)一个文本文件
- spring - 单元测试在Spring Boot中,设置后对象值发生变化?
- python-2.7 - 来自上下文管理器创建的对象的模拟函数
- python - 最初绘制正确设置所有轴的数据时执行的 matplotlib 函数的名称是什么?