我尝试在CakePhp 3.0.6中使用Ajax删除记录。
这是jquery在我的视图(start.ctp)
<script>
$('.delavailable').click(function(){
var dataString = 'ID=' + $(this).attr('id');
$.ajax({
type: 'POST',
url: '/ID/admins/delavailable.json',
data: dataString,
beforeSend: function(xhr) {
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
}
});
});
控制器(AdminsController.php)
public function delavailable()
{
$this->loadModel('TeamFree');
if($this->request->is('ajax')) {
$this->TeamFree->delavailable($this->request->data['ID']);
}
}
模型/表(TeamFreeTable.php)
public function delavailable($id){
$query = $this->find('all')
->select(['TeamFree.ID'])
->where(['TeamFree.ID ='=>$id]);
$this->delete($query);
}
返回
{
"message": "Unknown method 'u0022isNew'u0022",
"url": "'/ID'/admins'/delavailable.json",
"code": 500
}
我哪里失败了?
您正在传递一个查询对象到 Table::delete()
,这不是它的工作方式,该方法期望一个实体,您必须事先获取。
$this->delete($this->get($id));
参见
- Cookbook>数据库访问&ORM>删除数据
- Cookbook>…ORM>检索数据…通过主键获取单个实体
- Cookbook>…ORM>检索数据…>获取第一个结果
多亏了Cookbook和一些试验和错误,这就是我如何设法通过Ajax删除行。
public function delavailable()
{
$this->loadModel('TeamFree');
$teamfree = $this->TeamFree->newEntity(); //create a temporary entity
if($this->request->is('ajax')) {
$teamfree = $this->TeamFree->patchEntity($teamfree,$this->request->data); // put the request data into the temp entity
$this->TeamFree->delete($this->TeamFree->get($teamfree->ID)); //use get() to place the entity property into the delete function and let the delete function refer to the entity
}
}