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
+
0
-

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)