CakePHP HABTM关系,设置相关记录总是在jointable中添加新条目,即使已经存在

时间:2011-03-17 12:57:35

标签: cakephp cakephp-1.3 has-and-belongs-to-many

这是我的代码:

        $charities = explode(',',$this->data['Charity']['charities']);
        foreach ($charities as $key=>$charity){
            $data['Charity'][$key] = $charity;
        }
        $this->Grouping->id = $this->data['Charity']['grouping_id'];
        if ($this->Grouping->save($data)){
            //Great!
        }else{
            //Oh dear
        }

代码来自AJAX调用的动作。 $ this-> data ['Charity'] ['charities']是一个逗号分隔的慈善模型ID列表,HABTM分组。

代码工作正常,但Cake似乎没有检查该慈善机构是否已经与该分组相关联,所以我最终在连接表中有很多重复的条目。我可以看到这将是一个痛苦,所以我想现在就明白。

我做错了什么?

由于

1 个答案:

答案 0 :(得分:0)

我发现了一些事情:

一个。 $this->data['Charity']['charities']是一个数组,其中包含与表列对应的命名键吗?因为在foreach()循环中,您正在获取密钥并将其放入$data['Charity']数组中。结果可能是错误的格式。模型保存的$ data数组通常格式化为$data['Charity']['NAME_OF_COLUMN1], $data['Charity']['NAME_OF_COLUM2],对于要保存的每列,依此类推。因此,如果密钥是数字,那么您可能会遇到类似$data['Charity'][0], $data['Charity'][1]的内容,这是错误的。

B中。 HABTM关联以不同方式保存。我建议的是,你看看book's section on saving HABTM。我保存了这样的HABTM关系(假设用户和优惠券之间的关系):

$this->data['Coupon'] = array('id' => 1, 'code' = 'BlaBla');
$this->data['User'] = array('id' => 33);
$this->Coupon->save($this->data, false);

因此,正如您所看到的,$ data数组有一个以外部模型('User')命名的子数组,其中包含我要保存的列+值。然后我将此数组保存到Coupon模型中。

℃。请注意,CakePHP将在“更新”HABTM关系时始终删除旧记录并在连接表中插入新记录。为避免这种情况,请在Model的$ HABTM配置中将“unique”字段设置为false。