这是我的代码:
$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似乎没有检查该慈善机构是否已经与该分组相关联,所以我最终在连接表中有很多重复的条目。我可以看到这将是一个痛苦,所以我想现在就明白。
我做错了什么?
由于
答案 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。