divné chování NDB – iterování nad selection nevrací ActiveRow

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
elevate
Člen | 31
+
0
-

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?

Oli
Člen | 1215
+
0
-

Co obsahuje $c? Když si to dupneš, je to instance ActiveRow?

elevate
Člen | 31
+
0
-

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.

hrach
Člen | 1844
+
0
-

V podstate jsi neposkytl zadne smysluplne a cenne informace. Ze neni objekt? A co to je? „Jindy zase vyhodí NDB\Selection chybu“ a jakou? „Problém je v cachování „accesssed columns““ … to toho vime, jaky? Jak se to chova? jaky je vstup, jake volani…