CakePHP сохранить ассоциацию отношений из трех моделей
У меня есть следующий вывод, который мне нужно вставить в базу данных:
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 answers
Да, вы можете сохранять глубокие деревья моделей начиная с CakePHP 2.1 таким образом
$this->SomeModel->saveAll($data, array('deep' => true));
Я не уверен, но я думаю, что невозможно сохранить отношение третьего уровня.
Из Cakephp:
Сохранение связанных данных с помощью saveAll() будет работать только для непосредственно связанных моделей.
Вам придется извлечь данные третьего уровня и сохранить их отдельно от них.
У меня есть три модели 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);
}
}