私の質問は、リモートソースからデータを取り出してローカルデータベースに保存することに関するものです。 saveAll()
では、親データは正しく保存されますが、子データは保存されません。cakephp:with 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関係を持っています。 –