我有一个模型“报告”,其中一些字段可通过TranslateBehaviour进行翻译。 每份报告“都有并且属于许多人”报告标签和报告类别。
在我的ReportsController中,我尝试使用以下命令向DB添加新报告:
public function admin_add() {
if ($this -> request -> is('post')) {
$this -> Report -> create();
if ($this -> Report -> saveMany($this -> request -> data)) {
$this -> Session -> setFlash(__('Report saved OK'), 'flash/backend/success');
return $this -> redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('Report saved KO. Please, try again'), 'flash/backend/error');
}
}
$users = $this->Report->User->find('list');
$reportCategories = $this->Report->ReportCategory->find('list');
$reportTags = $this->Report->ReportTag->find('list');
$this->set(compact('users', 'reportCategories', 'reportTags'));
$this->set('title',__('New report'));
$this->set('item_selected',4);
}
但是这样做我向Reports表添加了三个报告,我要添加一个报告,另外两个报告是空的。 i18n表为翻译添加了正确的行(每个语言环境和可翻译字段一个),但是添加了两个空模型的字段的行,其中“content”字段为空。
如何只添加正确的值? 我也试过了
unset($this->request->data['ReportCategory']);
unset($this->request->data['ReportTag']);
在saveMany之前,但这会消除Report,ReportCategory和ReportTag之间的关联。
欲了解更多信息,$ this - >请求 - >数据包含:
array(3) {
["Report"]=> array(11) {
["published"]=> string(1) "0"
["sticky"]=> string(1) "0"
["in_rss"]=> string(1) "1"
["slug"]=> string(4) "asdf"
["media_uri"]=> string(4) "ssss"
["title"]=> array(3) {
["spa"]=> string(3) "www"
["eng"]=> string(3) "eee"
}
["summary"]=> array(3) {
["spa"]=> string(3) "www"
["eng"]=> string(3) "eee"
}
["body"]=> array(3) {
["spa"]=> string(12) "www"
["eng"]=> string(12) "eee"
}
}
["ReportCategory"]=> array(1) {
["ReportCategory"]=> array(1) {
[0]=> string(1) "7"
}
}
["ReportTag"]=> array(1) {
["ReportTag"]=> array(2) {
[0]=> string(2) "23"
[1]=> string(2) "24"
}
}
}
答案 0 :(得分:0)
解决。问题是saveMany。它必须由saveAll替换。当有HasMany关联时,我在其他控制器中使用saveMany,以保存可翻译字段的翻译数组。在HABTM协会中,这不起作用。希望这对某人有帮助。