2012-05-07 48 views
2

CakePHP的默认设置为true,我只是为了确保它而编码。 所以我有以下数据库结构: 项目HABTM行动,唯一设置为true。CakePHP - HABTM记录将不会被删除,唯一设置为true

的情况如下:

删除工作正常,在保存时,我删除1条或多个记录,如果ATLEAST 1纪录停留“活”

删除不工作时节省当我删除所有记录(或1记录,如果这是唯一的记录)。它只是保留所有现有的记录。

我已确认与调试($这个 - >请求 - >数据)右保存在此之前,它包含了行动没有。

+0

你有相反的关联关系:行动HABTM项目?你从哪里删除?你尝试通过一个保存操作(Action中没有任何内容)或Model :: delete(),Model :: deleteAll()来删除? –

+0

是的,在这两个模型中,我声明HABTM关系的'unique'设置为true。我的确尝试通过保存操作进行删除,在Action的帖子中没有任何内容。所以我不理解它,在Action的帖子里没有任何内容,它保留了它不应该记录的记录。 – pbond

+2

我的建议是沟通HABTM关系,并与'有很多通过'关系。 – Wylie

回答

4

从你的文章的评论的讨论我仍然困惑,但我知道那是什么你想: 保存在类似这样的格式的POST: 阵列( “项目” =>阵列( 'ID'=> '3' ) 随着:

$this->Item->SaveAll($this->request->data); 

你的POST应包含 '操作' 键:

array(
    'Item' => array(
     'id' => '3' 
    ), 
    'Action' => array(
     'Action' => array() 
    ) 

当e“操作”键被设置,Cake知道它必须“超越”关系和它的魔法。 然后它会删除。

我只是测试这对我正在开发一个应用程序,实际上发现这是一个错误。 :D问题 是对于特定的HATBM关系,我不得不使用手动生成的表单,因此发布时没有包含关系键没有设置和记录,没有被删除。我想表格助手会处理这个问题。

如果你有类似的问题,你可以用两种不同的方式管理这个:

  1. 将一个隐藏的输入用JavaScript

  2. 在控制器检查,如果“操作”键设置,如果不将其添加(作为空数组):

    $这 - >请求 - >数据[ '动作'] [ '动作'] =阵列();

    这可能是一种侵入性,但它会做的工作。

+0

谢谢!这工作。我已经添加了'if(empty($ this-> request-> data ['modelname']))'check到我的控制器,并且在保存之前添加了一个空数组。我正在使用HTML表单助手顺便说一句。 – pbond

+0

因此,如果您使用的表单助手比这可能是一个错误或impovemnt,你应该考虑报告它:http://cakephp.lighthouseapp.com/ –