Bug u related (nejspíš v cachování?)
- Caine
- Člen | 216
U následujícího kódu mi to vrací stejné výsledky, i když by nemělo. Donedávna to fungovalo správně, ale nějakým nedávným updatem se to pomršilo (používám aktualní dev verzi nette)..
foreach ($this->table('servers') as $server) { /* @var $server ActiveRow */
$total = $server->related('offer', 'id_server') //celkovy pocet
->count('id_offer');
$active = $server->related('offer', 'id_server') //pouze aktualnich
->where('active', 1)
->where('NOW() <= end_time')
->where('start_time IS NULL OR start_time < NOW()')
->count('id_offer');
... pouziti onech hodnot ...
}
Momentálně to vrací stejný počty pro oboje (total i active) pro všechny krom prvního průchodu cyklem. Oba dva dotazy se sice spouštěj, ale výsledky to bere jen z toho active. Když jeden z nich zakomentuju, výsledky pro danej dotaz se zobrazujou správně.
Editoval Caine (2. 4. 2012 16:55)
- Caine
- Člen | 216
Našel jsem další bug. Podmínka na https://api.nette.org/…ion.php.html#747 se vymaže v tý funkci setActive (#750), takže dotaz se spustí bez ní (dotaz vrátí všechny záznamy) a ačkoliv je výsledek ve finále správný (očekávaný výsledek), rozhodně není optimální (v mém případě se zbytečně vrátí něco přes 10 tisíc záznamů).
- Peetee
- Člen | 75
hrach napsal(a):
Set active se vola jen při jiném průchodu cyklu a vhledem k tomu, že to volání máš v cyklu, měli by se podmínky opět definovat.
Myslím, že s kolegou řešíme stejný problém – viz https://forum.nette.org/…-verzi-2-0-2#… teď nevím, jestli z Tvé odpovědi pro nás něco vyplývá.
- Caine
- Člen | 216
Nejedná se o kód z úvodu (se smyčkou), ale o přibližně takový
$this->user->getActiveRow()->related('sometable')->select($primaryCol)->fetchPairs($primaryCol, $primaryCol);
Do db se pošle jen obyčejnej
SELECT nejaky, sloupce FROM sometable
bez WHERE, takže db vrátí
zbytečně všechny záznamy z tabulky.