【问题标题】:Association and model data saving problem关联和模型数据保存问题
【发布时间】:2010-04-08 17:48:05
【问题描述】:

使用 cakephp 1.3 开发(最新来自 github)。 有 2 个模型与 hasAndBelongsToMany 绑定:文档和标签。换句话说,文档可以有很多标签。我已经添加了一个新的文档提交表单,用户可以输入一个用逗号分隔的标签列表(如果不存在,将添加新标签)。我在 github 上查看了 cakephp bakery 2.0 source code 并找到了解决方案。但似乎有些不对劲。

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 ('Document with tags', '', '', Array, 1) 任何想法如何解决这个问题?

附:发布此表单的萤火虫数据: _方法 POST data[Document][content] 测试文档内容 数据[文档][日期][年份] 2010 data[Document][shortnfo] 关于文档的简短信息 数据[文档][状态] 1 data[Document][tags] 测试、分类、列表 数据[文档][标题] 测试标题 我们可以看到没有数组。

【问题讨论】:

  • 您可以添加您要保存的数据数组吗?看起来 $data['Document']['shortnfo'] 是一个数组,而它应该是一个 int/string/float/whatever。
  • 来自 FireBug 的发布请求:data[Document][content] = "test document content" data[Document][date][year]= 2010 data[Document][shortnfo]= "short info about document" data[Document][status]= 1 data[Document][tags]= "test, categories, list" data[Document][title]= "Test title"

标签: cakephp associations tagging


【解决方案1】:

解决了! :) 问题出在视图中:

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

但数据库中的日期字段。该字段的类型是年份。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多