cakephp:使用 saveAll(),导入的(非表单相关的)关联数据不保存

Posted

技术标签:

【中文标题】cakephp:使用 saveAll(),导入的(非表单相关的)关联数据不保存【英文标题】:cakephp: with saveAll(), imported (non-form-related) associated data not saving 【发布时间】:2012-05-07 21:42:18 【问题描述】:

我的问题与从远程源提取数据并将其保存到本地数据库有关。使用saveAll(),可以正确保存父数据,但不能正确保存子数据。

protected function _saveLocal($_rekeyedData) 
        //Set the invoice header and line items models
        if (!isset($this->LocalHeader)) 
            $this->loadModel('LocalHeader');
            $this->LocalHeader->create();
//            $this->LocalHeader->set($_rekeyedData);
            if (!isset($this->LocalDetail)) 
                $this->loadModel('LocalDetail');
                $this->LocalDetail->create();
            
        

        if ($this->LocalHeader->saveAll($_rekeyedData, array('validate' => 'first'))) 
            $this->Session->setFlash('Your data has been saved.');
         else 
            $this->Session->setFlash('Data load failed.');
        
        debug( $this->LocalDetail->invalidFields() );
    

在这个函数中,我加载模型,然后尝试saveAll()。示例记录如下所示:

[1] => Array
    (
        [LocalHeader] => Array
            (
                [SOPNUMBE] => CR014076             
                [DUEDATE] => 2012-04-10 00:00:00
                [DOCDATE] => 2012-04-10 00:00:00
                [DOCAMNT] => 12000.00000
                [SUBTOTAL] => 12000.00000
            )

        [LocalDetail] => Array
            (
                [0] => Array
                    (
                        [ITEMNMBR] => BASIC SERVICE                  
                        [QUANTITY] => 1.00000
                        [UOFM] => EA       
                        [UNITPRCE] => 12000.00000
                        [TAXAMNT] => .00000
                        [CONTSTARTDTE] => 1900-01-01 00:00:00
                        [CONTENDDTE] => 1900-01-01 00:00:00
                        [SOPNUMBE] => CR014076             
                    )

            )

    )

所有被保存的是 LocalHeader 记录。我的预感是它与array('validate' => 'first') 有关。我想在使用 saveAll() 时我需要做一些单独的事情,比如 validateMany,但我不记得我在哪里看到过类似的东西,或者我只是编造的。

我已阅读 SO 中的许多相关问题,但所提供的解决方案均不适合我。

感谢任何帮助。如果您有任何问题,请随时提出。

编辑: 这是header model,这是detail model。

【问题讨论】:

(更新)你定义了模型关系吗?您是否为 LocalDetail 定义了模型验证? 是的,我烤了两个模型。所以,我有验证和适当的 $hasMany 关系。 【参考方案1】:

我认为问题在于这些记录都不存在。根据文档

如果系统中还没有关联的模型记录 (例如,您要保存一个新用户及其相关的个人资料 同时记录),您需要先保存主文件,或者 父模型。

您可以通过示例阅读更多here。

【讨论】:

我认为你是对的。我一直在调查。谢谢。

以上是关于cakephp:使用 saveAll(),导入的(非表单相关的)关联数据不保存的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP 使用 saveAll:如何使用 HABTM 链接记录保存额外数据?

CakePHP:用户数据 saveAll 静默失败?

CakePHP 使用 3 个带有 saveAll 的模型

CakePHP saveAll 方法

Cakephp - saveAll 和 beforeSave

是否可以使用 Cakephp 中的 saveAll 一次将所有相关记录插入到 HABTM 中?