如何在CakePHP中使用TranslateBehaviour保持HABTM

时间:2014-06-09 09:45:05

标签: cakephp cakephp-2.3 translate

我有一个模型“报告”,其中一些字段可通过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" 
    } 
} 
}

1 个答案:

答案 0 :(得分:0)

解决。问题是saveMany。它必须由saveAll替换。当有HasMany关联时,我在其他控制器中使用saveMany,以保存可翻译字段的翻译数组。在HABTM协会中,这不起作用。希望这对某人有帮助。