通过自定义字段将PHP删除

0 php database cakephp

我有表格类别,我想通过id_category删除记录.我做错了什么?

index.ctp:

<?php
echo $this->Form->postLink(
    'Delete',
    array('action' => 'delete', $categories['Category']['id_category']),
        array('confirm' => 'Are you sure?')
    );
?>
Run Code Online (Sandbox Code Playgroud)

CategoriesController:

public function delete($id) {
    if ($this->request->is('get')) {
        throw new MethodNotAllowedException();
    }

    $categories = $this->Category->findById_Category($id);
    $this->Category->delete($categories['Category']['id_category']);
}
?>
Run Code Online (Sandbox Code Playgroud)

mar*_*ark 5

findById_Category()不是有效的魔术探测器.

如记录所示,您需要使用正确的驼峰格式:

findByIdCategory()
Run Code Online (Sandbox Code Playgroud)

但就个人而言,我不会使用魔法探测器.我会使用普通的find(first)调用.

并且$categories当您期望单个结果时不要调用您的变量.这令人困惑.

最后但同样重要的是,还要注意"id_category"是非常传统的.如果没有理由,请不要遵守约定,在这种情况下,"category_id"表示类别模型/类别表的外键字段名称.

编辑 上面的评论让我相信,你的非常规"id_category"字段实际上应该是该表的主键.这会使您的查找调用实际上甚至不正确,因为在这种情况下您应该使用(链接)文档将该字段正确映射为主键:

public $primaryKey = 'id_category';
Run Code Online (Sandbox Code Playgroud)

但是同样的事情也是如此:如果没有合理的理由,请不要使用"id_category"而应使用"id".

无论哪种方式,您都可以直接使用

$this->Category->delete($id);
Run Code Online (Sandbox Code Playgroud)

此外,在寻找记录时:

$this->Category->findById($id); // No matter what the field actually is named
Run Code Online (Sandbox Code Playgroud)

为了节省:

$this->Category->save($data);
$id = $this->Category->id; // It will always map to `->id` internally.
Run Code Online (Sandbox Code Playgroud)

文档:http://book.cakephp.org/2.0/en/models/model-attributes.html#primarykey