Cakephp - Сохранение связанных моделей - PullRequest
1 голос
/ 30 июля 2011

У меня есть следующие отношения между моими моделями:

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');

?>

Ответы [ 2 ]

0 голосов
/ 30 июля 2011

Я решил сохранить все самостоятельно.

Что вы думаете об этой возможности?

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);                           
                    }
                }


            }
        }   
    }

}
0 голосов
/ 30 июля 2011

Может быть потому, что:

Assignment hasMany Question

Но у Назначения нет ответа.

Если вы найдете («все») в Назначении с правильной рекурсивной опцией, он покажет все записи насвязанные модели.Но при создании нового назначения будут сохранены только таблицы, имеющие прямое отношение.И Ответ не один.

Чтобы создать новый ответ, необходимо либо установить связь между Назначением и Ответом, либо создать функцию для создания ответа после сохранения создаваемого Назначения.

Вы могли бы на 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);
}

Я не уверен, но я думаю, что вы можете вставить идентификатор последнего вопроса, просто используя:

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

Кстати ..Почему вы хотите автоматически создавать новый ответ после создания нового задания / вопроса?Это не имеет смысла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...