Я пытаюсь написать некоторую логику beforeSave в CakePHP 2.0 beta. По сути, я хочу, чтобы пользователь мог отправлять текст для тегоподобных функций. Функция 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
)
)
)
)
Также успешно сохраняет данные в первичной модели (Project). Но ассоциации под [Term] [Term] игнорируются. Я уверен, что это правильная структура массива для сохранения ассоциаций HABTM.
Кто-нибудь видит, что с этим не так?