Проблема ассоциации и сохранения модели данных - PullRequest
0 голосов
/ 08 апреля 2010

Разработка с 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 данные [документ] [теги] тест, категории, список данные [Документ] [заголовок] Название теста Нет массивов, как мы видим.

1 Ответ

0 голосов
/ 09 апреля 2010

Решено! :) Проблема была во взгляде:

'date'=>array('label'=>'Date', 'type'=>'date', 'dateFormat'=>'Y'),

Но поле даты в базе данных. тип этого поля - год.

...