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