Plnění zanořených kontejnerů
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Lukáš Kadlec
- Člen | 17
Zdravím,
potřebuji naplnit editační formulář daty z databáze. Ve formuláři mám
tři zanořené kontejnery. Plnění:
$evaluation = $this->context->createEvaluations()->get($id);
$form->setValues($evaluation);
$g = 0;
foreach ($evaluation->related('evaluation_group') as $group) {
$form['groups'][$g]->setValues($group);
$q = 0;
foreach ($group->related('evaluation_question') as $question) {
$form['groups'][$g]['rating'][$q]->setValues($question);
$o = 0;
foreach ($question->related('evaluation_option') as $option) {
$form['groups'][$g]['rating'][$q]['rate'][$o++]->setValues($option);
}
$q++;
}
$g++;
}
První i druhý kontejner je naplněn v pořádku. Třetí foreach naplní form daty pouze při prvním průchodu prvního foreach-e. Co je špatně? Generované SQL:
SELECT * FROM `evaluation` WHERE (`id` = ?)
SELECT * FROM `evaluation_group` WHERE (`evaluation_group`.`evaluation_id` IN (3))
SELECT * FROM `evaluation_question` WHERE (`evaluation_question`.`evaluation_group_id` IN (6, 9, 10))
SELECT * FROM `evaluation_option` WHERE (`evaluation_option`.`evaluation_question_id` IN (23, 27, 28))
SELECT * FROM `evaluation_option` WHERE (`evaluation_option`.`evaluation_question_id` IN (NULL))
(Co tam dělá ten poslední SELECT?)
- Lukáš Kadlec
- Člen | 17
Tak po dvou dnech vyřešeno, díky za tip zarubik
Kdyby někdo řešil obdobný problém, stačí aktuální Nette 2.0.5, který tento bug řeší.