4

次の構造でデータを保存しようとしています:代替テキスト

ご覧のとおり、ユーザーエクスペリエンステーブルの間に HABTM 関連付けがあります。また、 experiences_userstagsの間に別の HABTM があります。次のフォームを作成しました。

<?php echo $form->create('Experience', array('action' => 'addClassic'));?>
    <?php
    echo $form->input('Experience.date', array('dateFormat' => 'DMY'));
    echo $form->input('Experience.time', array('timeFormat' => '24', 'empty' => array(-1 => '---'), 'default' => '-1'));
    echo $form->input('Experience.name');
    echo $form->input('ExperiencesUser.1.note');
    echo $form->input('ExperiencesUser.1.rating'); 
    //echo $form->input('Tags.Tags', array('multiple' => 'multiple', 'options' => $tags));
    //echo $form->input('ExperiencesUser.1.Tags', array('multiple' => 'multiple', 'options' => $tags));
    //echo $form->input('ExperiencesUser.1.Tags.Tags', array('multiple' => 'multiple', 'options' => $tags));
    echo $form->input('ExperiencesUser.1.confirmed', array('type' => 'hidden', 'value' => '1'));

    echo $form->input('ExperiencesUser.1.user_id', array('type' => 'hidden'));
    echo $form->input('ExperiencesUser.2.user_id', array('type' => 'hidden'));
    ?>
<?php echo $form->end(__('Add', true));?>

そして、すべてがうまく機能します。saveAllメソッドは、新しいエクスペリエンスを作成し、この新しいエクスペリエンスを 2 人のユーザーに割り当て ( Experiences_users を介して)、設定を行います。

私を悩ませているのは、新しく作成されたexperience_usersレコード(最初のレコード)にいくつかのタグを割り当てたいということです。コメントされたもののいくつかを介して行う必要があると思いました。このコメント化されたコードのすべての行はフォームを作成し、データを$this->dataに送信しますが、保存されることはありません。

私の質問は次のとおりです: 私の例で $this->data または $form->input の正しい構文ですか?

4

1 に答える 1

5

私はそれを考え出した。Cake saveAll関数は、直接関連付けられたモデルに対してのみ機能します。幸いなことに、Cakeはこれを処理できます。

見る

echo $form->input('Tags.Tags', array('multiple' => 'multiple', 'options' => $tags));

コントローラ

$this->Experience->saveAll($data, $parameters);
$this->Experience->ExperiencesUser->save($data);

saveAll()を呼び出した後のCakeは、 $this->dataに最後に挿入されたIDを入力します。したがって、2番目のsave()を呼び出すと、データが正しいテーブルに保存され、外部キーが適切に設定されます。

于 2009-06-08T08:06:34.693 に答える