divné chování NDB – iterování nad selection nevrací ActiveRow
- elevate
- Člen | 31
Zdravím, setkal jsem se s velmi podivným chováním NDB
řešíme náročnou výpočetní operaci. Před tímto se provádějí řádově stovky dotazů do DB.
Kód podobný tomuto vyhazuje chybu.
foreach($comments as $c) // $c není objekt! Exception Trying to get property of
non object.
Jak je možné, že foreach nad Selection/GroupedSelection neiteruje
objekty?
Jindy zase vyhodí NDB\Selection chybu. Stává se to pouze při této operaci,
kdy se dotazuje opravdu na velké množství dat.
Smazání cache chybu neřeší.
verze Nette – 2.1.2
ukázka kódu, který vyhazuje chybu:
<?php
$comments = $this->artile->related('comment')
->where('isDeleted', FALSE);
foreach ($comments as $c) {
$tmp = $c->toArray(); // $c není objekt..
?>
Setkali jste se někdo s podobným problémem?
- elevate
- Člen | 31
Problém je v cachování „accesssed columns“, dočasně jsem to fixnul tak, že před tímto výpočtem přes reflexi unsetnu cache storage a zruším tak dočasně toto cachování.
Chová se to opravdu divně. Přes celou tuto operaci mám transakci. Spustím poprvé a chyba v Selection, nevalidní index pole. Po druhé to samé, ale na jiném místě, potřetí proběhne v pořádku. Pak se toto zase opakuje.
Zkusím problém více analyzovat a pak dám více informací.
e.