我试过用3种方式创建通用删除功能。
function DeleteByID($table, $id){
1. DB::table("$table")->delete("$id");
2. DB::table("$table")->find("$id")->delete();
3. DB::table("$table")->where('id', '=', "$id")->delete();
}
我正在使用ajax将请求发送到Ajax Controller类,该类将其发送到特定主题的相应控制器类。使用ajax请求一切顺利,它会做它应该做的事情。但是从表中删除某些内容不起作用。
是的,当我调用DeleteByID($table, $id)
函数时,我正在将正确的表名放入$ table参数中。
从ajax请求中删除每个双""
到删除函数的调用。
DB::table($table)->where('id', '=', $value)->delete();
现在是什么。仍然无效。
这会触发DeleteRole功能。这将打开一个模态,询问您是否确定要删除该记录。将会有另一个带有onclick="DeleteRole(this.id, true)"
的按钮,其中包含id随之发送的信息。
<a id="{{$role->id}}" onclick="DeleteRole(this.id, false)">
<button class="btn btn-neutral btn-icon btn-round" data-toggle="modal"
id="{{$role->id}}" data-target="#rolesModalDelete">
<i class="material-icons" style="color:rgba(185,14,22,0.81)">clear</i>
</button>
</a>
AJAX请求:
function DeleteRole(id, bool){
let contentModal = $('#DeleteRoleContent');
if(bool === false){
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: '/DeleteRole',
type: 'POST',
dataType: "json",
beforeSend: function (xhr) {
const token = jQuery('meta[name="csrf_token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
},
data: {
roleID: id,
popup: bool,
},
success: function (data) {
contentModal.empty();
contentModal.append(data);
}
});
}else if (bool === true){
let row = $('#' + id);
$.ajaxSetup({
headers: {
'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
}
});
$.ajax({
url: '/DeleteRole',
type: 'POST',
dataType: "json",
beforeSend: function (xhr) {
const token = jQuery('meta[name="csrf_token"]').attr('content');
if (token) {
return xhr.setRequestHeader('X-CSRF-TOKEN', token);
}
},
data: {
roleID: id,
popup: bool,
},
success: function (data) {
row.empty();
}
});
}
}
if
语句检查$_POST['popup']
是否为真,但被忽略。更改了它,因此删除现在可以正常工作。但是现在不会调用成功处理程序。 ajaxrequest返回200 OK。
public function RoleDelete()
{
if($_POST['roleID']){
if($_POST['popup'] == 0){
$htmlObject = $this->roleController->GetData($_POST['roleID']);
echo json_encode($htmlObject);
} else {
if($_POST['roleID'] !== null) {
$this->db->DeleteByID('rollen', $_POST['roleID']);
} else {
echo json_encode('ID is null');
}
}
} else {
echo json_encode('Geen gegevens gevonden, is het record al verwijderd? AC 256;');
}
}
答案 0 :(得分:1)
你应该试试这个
请勿使用&#34;&#34; 作为变量
1. DB::table($table)->delete($id);
2. DB::table($table)->find($id)->delete();
3. DB::table($table)->where('id', '=', $id)->delete();
答案 1 :(得分:1)
我很抱歉,如果这是“确保它插入”的答案,但有时简单的东西是最容易被忽视的,特别是当你对代码进行隧道视觉时。也就是说,您确定您的数据库凭据实际上具有删除权限吗?
答案 2 :(得分:0)
if语句检查$ _POST ['popup']是否为真,被忽略。更改了它,因此删除现在可以正常工作。但是现在不会调用成功处理程序。 ajaxrequest返回200 OK。
public function RoleDelete(){
if($_POST['roleID']){
if($_POST['popup'] == 0){
$htmlObject = $this->roleController->GetData($_POST['roleID']);
echo json_encode($htmlObject);
} else {
if($_POST['roleID'] !== null) {
$this->db->DeleteByID('rollen', $_POST['roleID']);
} else {
echo json_encode('ID is null');
}
}
} else {
echo json_encode('Geen gegevens gevonden, is het record al verwijderd? AC 256;');
}
}