1

モデル間には次のような関係があります。

Assignment hasMany Question
Question belongsTo Assignment
Question hasMany Answer
Answer belongsTo Question

課題、質問、回答を保存できる単一のフォームが欲しいのですが。

フォームはほぼ機能しており、課題情報と質問は保存されますが、回答は保存されません。

割り当てコントローラー作成アクション:

function create() {
        if (!empty($this->data)) {

        var_dump($this->data);

        unset($this->Assignment->Question->validate['assignment_id']);
        unset($this->Assignment->Question->Answer->validate['question_id']);
        $this->Assignment->saveAll($this->data, array('validate' => 'first'));
    }
}

create.ctp

Create new assignment
<?php

echo $this->Form->create('assignment', array('action' => 'create'));
echo $this->Form->input('Assignment.title');
echo $this->Form->input('Assignment.type');
echo $this->Form->input('Question.0.question');
echo $this->Form->input('Question.0.Answer.0.answer');
echo $this->Form->end('Create');

?>
4

2 に答える 2

0

多分理由:

Assignment hasMany Question

しかし、割り当てには回答がありません。

正しい再帰オプションを使用してAssignmentで('all')を見つけると、関連するモデルのすべてのエントリが表示されます。ただし、新しい割り当てを作成すると、直接関連するテーブルのみが保存されます。そして、Answerは1つではありません。

新しい回答を作成するには、割り当てと回答を関連付けるか、作成中の割り当てを保存した後に回答を作成する関数を作成します。

あなたはassignments_controller.phpでできます

function create() {
    $this->Assignment->saveAll($this->data, array('validate' => 'first'));
    $this->loadModel('Answer');
    $data[] = array(
        'question_id' => GET_THE_ID_OF_LAST_QUESTION_INSERTED
    );
    $this->Answer->save($data);
}

よくわかりませんが、次のコマンドを使用するだけで、最後の質問のIDを挿入できると思います。

$this->Assignment->Question->id;

ちなみに...新しい課題/質問を作成した後、なぜ自動的に新しい回答を作成したいのですか?意味がない。

于 2011-07-30T14:38:42.813 に答える
0

私はすべてを独立して保存することにしました。

この可能性についてどう思いますか?

function create() {

    if (!empty($this->data)) {
        if ($this->Assignment->save($this->data)) {
            foreach($this->data['Question'] as $question) {
                $this->Question->create();
                $question['assignment_id'] = $this->Assignment->getLastInsertId();

                if($this->Question->save($question) && $failed == false) {
                    foreach ($question['Answer'] as $answer) {
                        $this->Answer->create();
                        $answer['question_id'] = $this->Question->getLastInsertId();

                        $this->Answer->save($answer);                           
                    }
                }


            }
        }   
    }

}
于 2011-07-30T16:28:34.363 に答える