我正在尝试从我的表中删除与特定id对应的条目列表。我得到id并通过ajax函数将其发布到控制器并使用模型的Delete函数删除特定条目。但条目不会被删除。
这是我在视图文件中的ajax函数,名为reports.ctp,我在单击链接时调用控制器函数。
$(".delete_entries").click(function() {
$.ajax({
type: "POST",
url: "http://localhost/FormBuilder/reports/deleteEntries",
data: "formid="+formid,
async: false,
success: function(msg){
alert( "Data Saved: " + msg);
}
});//ajax
});
这是reports_controller.php
中的删除操作function deleteEntries()
{
$this->data['Result']['form_id']=$this->params['form']['formid'];
$this->Report->Result->delete($this->data['Result']['form_id']);
}
我想要删除条目的表是“结果”。一些人帮助我如何删除条目。
修改
现在我正在使用delete sql查询来删除Results表中的条目。
$this->Result->query("delete from results where form_id=".$this->data['Result']['form_id']);
我不知道为什么CakePHP的删除命令不起作用。
但现在的问题是,只有当我刷新页面时,才会反映出条目的删除。如果我不刷新,条目仍会显示在表格中。 也许如果CakePHP的删除功能工作,页面将刷新。
解
deleteAll方法有效,因为我没有像deceze所指出的那样将主要id作为delete方法的输入。
$ this->结果 - > deleteAll(array('Result.form_id'=> $ this-> data ['Result'] ['form_id']));
关于反映删除条目的问题,我在Xr建议的时候做了$(“。entries).remove()成功,因此删除条目表而不必刷新页面。
答案 0 :(得分:5)
"delete from results where form_id=".$this->data['Result']['form_id']
问题是您要删除主id
以外的字段。期望Model::delete()
方法为您提供主id
字段。
当你想要做的时候
$this->Report->Result->delete($this->data['Result']['form_id']);
即使你先将form_id
放入一个漂亮的数组中,结果就是这样:
$this->Report->Result->delete(25); // let's say 'form_id' is 25
告诉delete()
使用 Result
25删除id
,它不知道您要基于不同的标准删除,也不关心。
您正在寻找的是Model::deleteAll()
。
<强>
deleteAll(mixed $conditions, $cascade = true, $callbacks = false)
强>与del()和remove()相同,但deleteAll()删除与提供的条件匹配的所有记录。 $ conditions数组应该作为SQL片段或数组提供。
你应该可以用它做这样的事情:
$this->Result->deleteAll(array('Result.form_id' => $this->data['Result']['form_id']));
答案 1 :(得分:1)
$this->Report->delEntries($data);
不应该是
$this->Report->delEntries($this->data);
我看起来没多远,但$ data看起来不像在deleteEntries()中定义。
答案 2 :(得分:0)
function deleteEntries() {
App::import('Sanitize');
$post = Sanitize::clean($_POST);
//very important to set cascade to false
$this->Result->delete($post['form_id'],false);
}
答案 3 :(得分:0)
你的第二个问题可能最好放在一个单独的问题中,但这里是:
正如之前所指出的那样,表格不会因为您的数据库发生变化而神奇地改变。您必须刷新页面或通过Javascript删除已删除的条目。
首先,您的Controller方法应该返回删除是否成功。你可以这么做:
function delete() {
$this->layout = 'ajax';
if ($this->Result->deleteAll(...)) {
echo "success";
} else {
echo "failure";
}
}
要成为正确的MVC,你应该在View中返回这个值,最好是JSON格式,但是它也可以用于练习。
在您的网站上,假设您有此表:
<table>
<tr>
<td>Id: 25</td><td>My result</td><td><a class="delete_entries">Delete Entries</a></td>
<tr>
...
</table>
在您的Javascript中,附加到行中的链接,您的success
回调看起来像这样:
$(".delete_entries").click(function() {
// save a reference to the link, "this" will be something else in the callback
var deleteLink = this;
$.ajax({
...
success: function(data){
if (data == "success") {
// remove the row in which the link resides
$(deleteLink).parents('tr').remove();
}
}
}
}