CakePHP сохранить ассоциацию отношений трех моделей - PullRequest
8 голосов
/ 08 апреля 2011

У меня есть следующий вывод, который мне нужно вставить в базу данных:

Array
(
[Test] => Array
    (
    )

[Question] => Array
    (
        [0] => Array
            (
                [category_id] => 3
                [answer_style_id] => 2
                [Answer] => Array
                    (
                        [0] => Array
                            (
                                [capital_category_id] => 14
                                [correct] => 1
                            )

                       ...
         ...

Вкратце, у каждого теста есть много вопросов, и у каждого вопроса есть много ответов, причем у каждой связанной модели есть внешний ключ, который требуетдолжен быть установлен Cake (каждый вопрос имеет test_id, а каждый ответ имеет question_id).

Проблема в том, что когда я $this->Test->saveAll($data);, сохраняются только тест и вопросы, а не ответы.

Как сохранить все данные, если Cake автоматически установит внешний ключ для каждой связанной модели?

Спасибо!

Ответы [ 3 ]

5 голосов
/ 08 апреля 2011

Я не уверен, но я думаю, что невозможно сохранить отношение третьего уровня.

от Cakephp:

Сохранение связанных данных с помощью saveAll () будет работать только для непосредственно связанных моделей.

вам придется извлечь данные третьего уровня и сохранить их отдельно от них.

4 голосов
/ 20 июля 2013

Да, вы можете сохранять глубокие деревья моделей, начиная с CakePHP 2.1, таким образом

$this->SomeModel->saveAll($data, array('deep' => true));

Ссылка здесь> http://book.cakephp.org/2.0/en/appendices/new-features-in-cakephp-2-1.html#model-saveall-model-saveassociated-model-validateassociated

1 голос
/ 19 марта 2012

У меня есть три модели A, B и C

А имеетМного Б B имеет много C

$ A-> saveAll () сохранит модель A & B, но не C

Вот игра, которую я использую:

в модели B переопределить послеСохранить, как это

function afterSave($created) {
    if ($created) { // check if we are in save not update
        $this->data['B']['id'] = $this->id;
        $this->data['C'] = $this->data['B']['C'];
        $this->saveAll($this->data);
    }
}
...