Разработка с cakephp 1.3 (последняя версия от github).
Есть 2 модели, связанные с hasAndBelongsToMany: документы и теги. Документ может иметь много тегов другими словами. Я добавил новую форму отправки документов, где пользователь может ввести список тегов, разделенных запятыми (новый тег будет добавлен, если он еще не существует) Я посмотрел на github пекарню cakephp 2.0 исходный код и нашел решение. Но, похоже, что-то не так.
class Document extends AppModel {
public $hasAndBelongsToMany = array('Tag');
public function beforeSave($options = array()) {
if (isset($this->data[$this->alias]['tags']) && !empty($this-
>data[$this->alias]['tags']))
{
$tagIds = $this->Tag->saveDocTags($this->data[$this->alias]
['tags']);
unset($this->data[$this->alias]['tags']);
$this->data[$this->Tag->alias][$this->Tag->alias] = $tagIds;
}
return true;
}
}
class Tag extends AppModel {
public $hasAndBelongsToMany = array ('Document');
public function saveDocTags($commalist = '') {
if ($commalist == '') return null;
$tags = explode(',',$commalist);
if (empty($tags)) return null;
$existing = $this->find('all', array(
'conditions' => array('title' => $tags)
));
$return = Set::extract($existing,'/Tag/id');
if (sizeof($existing) == sizeof($tags)) {
return $return;
}
$existing = Set::extract($existing,'/Tag/title');
foreach ($tags as $tag) {
if (!in_array($tag, $existing)) {
$this->create(array('title' => $tag));
$this->save();
$return[] = $this->id;
}
}
return $return;
}
}
Итак, создание новых тегов работает хорошо, но модель документа не может сохранить данные ассоциации и говорит:
Ошибка SQL: 1054: неизвестный столбец «Массив» в «списке полей»
Запрос: INSERT INTO documents
(title
, content
, shortnfo
,
date
, status
) VALUES ('Документ с тегами', '', '', Array, 1)
Есть идеи, как решить эту проблему?
P.S. Отправьте данные из firebug для этой формы:
_method POST
data [Document] [content] содержимое тестового документа
данные [документ] [дата] [год] 2010
data [Document] [shortnfo] краткая информация о документе
данные [документ] [статус] 1
данные [документ] [теги] тест, категории, список
данные [Документ] [заголовок] Название теста
Нет массивов, как мы видим.