2012-12-22 121 views
1

我在NodeNodeTag之间有hasAndBelongsToMany关联。如何在CakePHP中为空时保存HasAndBelongsToMany(habtm)数据

当至少有一个被选中时,我保存的效果很好,但是 - 如果有先前的关联,并且他们尝试保存时没有选中,我的habtm表不会更新,因为它没有得到任何通过NodeTag 。 (我不知道这是因为我使用JavaScript和自定义按钮,还是默认的CakePHP复选框做同样的事情)。

回答

2

在我的控制器,保存之前,我添加了这个:

if(!isset($this->request->data['NodeTag'])) { 
    $this->request->data['NodeTag'][0] = array(); 
} 

这使得它,所以如果我不发送任何数据NodeTag,我现在通过一个空数组,并更新habtm表以便此节点不再有任何NodeTags的行。

注:通知阵列结构:['NodeTag'][0] = array();

0

实际上,我是用你的解决方案,直到我恍然大悟,这是可能的表单助手来实现这一目标。将hiddenField选项设置为true('hiddenField' => true)将强制提交一个空数组。这样做可以节省您在控制器中再次检查的麻烦。

我不知道如何用javascript实现它,但默认复选框有功能。

+0

'hiddenField'默认为'true',所以将它设置为true什么也不做。是的,它不会从提交中改变它,但它提交的内容(默认情况下)不会更新HABTM数据。 – Dave