bug v ->related->where (a asi cache)
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- karelb
- Člen | 17
Mám takový problém, o kterém si myslím, že je to bug.
Autor má články, články mají komentáře. Autorovo ActiveRow už mám v
$autor
.
<?php
//vyberu všechny články od autora, co mají ID 1123
$jeden_clanek_t = $autor->related('CLANEK')->where('ID=?',1123);
//vezmu všechny články od autora
$vsechny_clanky = $autor->related('CLANEK');
//vezmu článek s ID 1123
$jeden_clanek=$jeden_clanek_t->fetch();
//vezmu jeho komentáře a nic s nima nedělám
$zahod = $jeden_clanek->related('KOMENTAR');
//ted chci u každého článku jeho seznam komentářů. ALE!!!!
foreach ($vsechny_clanky as $clanek) {
$wtf = $clanek->related('KOMENTAR');
//když si nechám vypsat, na jaké ID se ptá...
ob_start();
var_dump($wtf->sqlBuilder->getParameters());
$vardump = ob_get_clean();
throw new \Exception($clanek["ID"]." ---- ".$vardump);
//tak se mi CHYBNĚ vyhodí
//
//1122 ---- array(1) { [0]=> array(1) { [0]=> int(1123) } }
//tj. select se ptá na ÚPLNĚ NĚCO JINÉHO!!
//a vrací se mi tady pro většinu článků kromě 1123 PRÁZDNÁ MNOŽINA!!
}
?>
Ale když řádek
<?php
$zahod = $jeden_clanek->related('KOMENTAR');
?>
zakomentuju, tak už to funguje dobře a vyhodí to správně
<?php
1122 ---- array(1) { [0]=> array(5) { [0]=> int(1122) [1]=> int(1123)
[2]=> int(1124) [3]=> int(1125) [4]=> int(1126) } }
?>
to znamená – to, jestli mi nějaký select vůbec něco vrátí závisí na úplně jiných selectech.
Daří se mi to reprodukovat opakovaně a na jiných tabulkách. Nevím, jak vypnout cache u databáze (hlásí mi to setCacheStorage jako „deprecated“), navíc nevim, jestli je to v chache nebo ne; takže místo toho přepisuji ->related jako obyčejné SELECTy.
Editoval karelb (5. 2. 2014 15:24)