【发布时间】: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