Přidání dat do výsledků z databáze a PDOException

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

Ahoj,
v modelu Products používám funkci pro vrácení produktů. K jednotlivým řádkům ve funkci process pak přidávám další data. Problém je, že někdy mi to hodí PDOException: No reference found for $products->isInAction zejména pokud smažu cache. Při dalším obnovení stránky už to funguje.

V příkladu níže přidávám ke každému výsledku data (např. isInAction viz níže, ale i další).

Co dělám špatně, že to někdy háže tu vyjímku? Používám Nette\Database

Díky

Vrácení produktů:

public function getByCategories(array $categories)
{

	$products = $this->connection->table($this->tableName)->where(...);

	return $products;

}

Přidání dat:

public function process($products)
{

	foreach ($products as $product) {
		$product->isInAction = ...;
	}

	return $products;

}

Nasypání do šablony v presenteru:

$products = $this->context->products->getByCategories($categories);
$this->template->products = $this->context->products->process($products);
jtousek
Člen | 951
+
0
-

Verze Nette? Jde o starší chybu, která by již měla být opravena.

matoni555
Člen | 40
+
0
-

Je to verze 2.0.5

matoni555
Člen | 40
+
0
-

Žádná rada?

matoni555
Člen | 40
+
0
-

Aktualizoval jsem na verzi 2.0.6 a stále stejná chyba.

enumag
Člen | 2118
+
0
-

Zvláštní. Měl jsem za to, že tyhle problémy jsou už vyřešené. Primárně bude potřeba struktura relevantní databáze. Úplně ideální by bylo chybu izolovat, tj. vzít sandbox a nasimulovat ji tam.

EDIT: Mohl bys zkusit ještě master z GitHubu?

Editoval enumag (22. 10. 2012 12:41)

Ivorius
Nette Blogger | 119
+
0
-

Je to i v masteru, mám stejný problém – https://forum.nette.org/…odified-data

enumag
Člen | 2118
+
0
-

Aha ono to bude totéž. Smůla je, že jak začal semestr tak naprosto nemám čas s tím něco udělat. :-( A kdoví jestli bych vůbec věděl co.

Ivorius
Nette Blogger | 119
+
0
-

Při nastavení cache na DevNullStorage (které se mi ale nepodařilo přepnout v configu) se ten problém nevyskytuje.

matoni555
Člen | 40
+
0
-

To mi je jasné, problém je v cache. Vypnutí cache ale není podle mě řešením.

jansfabik
Člen | 193
+
0
-

Ten problém zřejmě souvisí s bugem #841.

@Ivorius: Pokud vím, tak ten kód, na který odkazuješ, vypíná cache u všech služeb (tedy i RobotLoader), což je fakt znát. Pokud chceš vypnout jenom cache u NDB, tak zkus přidat do config.neon toto:

services:
	nette.database.default:
		setup:
			- setCacheStorage(NULL)

Osobně jsem ten drobný rozdíl ve výkonu skoro ani nepoznal. Teď mi takhle bez problému funguje i jeden web.

Ivorius
Nette Blogger | 119
+
0
-

@jansfabik: Super, já to pořád zkoušel nastavit pod common → nette sekcí a tam to nešlo.