我有表格类别,我想通过id_category删除记录。我做错了什么?
index.ctp:
<?php
echo $this->Form->postLink(
'Delete',
array('action' => 'delete', $categories['Category']['id_category']),
array('confirm' => 'Are you sure?')
);
?>
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']);
}
?>
答案 0 :(得分:5)
findById_Category()不是有效的魔术探测器。
如记录所示您需要使用正确的驼峰式格式:
findByIdCategory()
但就个人而言,我不会使用魔法探测器。我会改为使用普通的find(first)调用。
当您期望单个结果时,请不要调用变量$categories
。这很令人困惑。
最后但并非最不重要的是还注意到“id_category”非常不同寻常。如果没有理由,请不要在约定模型/类别表的外键字段名称的“category_id”中使用约定。
修改强> 上面的评论让我相信,你的非常规“id_category”字段实际上应该是该表的主键。这会使您的查找调用实际上甚至不正确,因为在这种情况下您应该使用(链接)文档将该字段正确映射为主键:
public $primaryKey = 'id_category';
但是同样的事情也是如此:如果没有合理的理由,请不要使用“id_category”而应使用“id”。
无论哪种方式,您都可以直接使用
$this->Category->delete($id);
此外,在寻找记录时:
$this->Category->findById($id); // No matter what the field actually is named
为了保存:
$this->Category->save($data);
$id = $this->Category->id; // It will always map to `->id` internally.
文档:http://book.cakephp.org/2.0/en/models/model-attributes.html#primarykey