Cakephp 3.x Ajax删除数据时会出现以下错误:未知方法"isNew"


Cakephp 3.x Ajax deleting data gives this Error: Unknown method "isNew"

我尝试在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
    }
}
相关文章: