我正在尝试在 CakePHP 2.0 beta 中编写一些 beforeSave 逻辑。基本上我希望用户能够为类似标签的功能提交一些文本。beforeSave 函数将搜索相关表,如果标签存在,只需将其链接到主记录,如果不存在,则创建新标签然后链接它。
所以这是我的函数(在 beforeSave 中):
function beforeSave() {
if(!empty($this->data['Term']) && isset($this->Term)){
$terms = $this->Term->find('list');
$terms = array_flip($terms);
foreach($this->data['Term'] as $key => $term){
if(!empty($terms[$term['name']])){
$this->data['Term']['Term'][$key]['id'] = $terms[$term['name']];
unset($this->data['Term'][$key]);
}else{
$this->Term->create();
$this->Term->save(array('Term' => array('name' => $term['name'])));
$this->data['Term']['Term'][$key]['id'] = $this->Term->id;
unset($this->data['Term'][$key]);
}
}
}
return true;
}
这基本上按照我想要的方式工作,在必要时创建记录并查找现有记录,创建如下数组:
Array
(
[Project] => Array
(
[id] => 2
[title] => Project Title
...
)
[Term] => Array
(
[Term] => Array
(
[0] => Array
(
[id] => 10
)
[1] => Array
(
[id] => 2
)
)
)
)
它还成功地将数据保存在主模型(项目)中。但是 [Term][Term] 下的关联被忽略。我很确定这是保存 HABTM 关联的正确数组结构。
有人看到这有什么问题吗?