POST データ配列はどのように見えますか?
<?php
debug($this->data);
?>
正しい形式でない場合、関連付けられたモデルは保存されません.Cake は、まだ保存されていないモデルの「lastInsertId()」を取得することを認識しているため、それらについて心配する必要はありません。 ...私が確信していないこと、およびドキュメントが実際に行っていないことは、保存がどれだけ深いかです。提供される例は次のとおりです。
$this->data =
Array
(
[Article] => Array
(
[title] => My first article
)
[Comment] => Array
(
[0] => Array
(
[comment] => Comment 1
[user_id] => 1
)
[1] => Array
(
[comment] => Comment 2
[user_id] => 2
)
)
)
$this->Article->saveAll($this->data);
これは、「hasMany」関係の関連付けられたモデルを保存するための正しい構造 (cakephp 1.3) ですが、1 つの子よりも深くなるかどうかはわかりません。
私の頭に浮かぶことの 1 つは、上記の形式に従って配列を構築することですが、親モデルは除外します。次に、親モデル データを手動で保存し、::getLastInsertId(); を取得します。次に、部門とグループに対して saveAll を実行します。
[更新] あなたの理論をテストしたところ、意図したとおりに機能します。
<?php
echo $this->Form->input('Department.0.Group.0.name');
?>
生産します:
<input name="data[Department][0][Group][0][name]" type="text" id="Department0Group0name">
[更新 2 ] lib/Cake/Model/Model.php をいくつか調べたところ、次のことがわかりました。
<?php
...
public function saveAssociated($data = null, $options = array()) {
...
... // code omitted.
...
if ($options['deep']) { // This will recurse infinitely through all associations
$saved = $this->{$association}->saveAssociated($values, array_merge($options, array('atomic' => false)));
}
...
...
... // code omitted.
...
?>