NDB related a nefunkční limit
- sKopheK
- Člen | 207
Nette 2.1dev
Schéma: http://img.lipe.cz/phase_table.jpg
Mám vytažený objekt ActiveRow
z tabulky
phase_group
a chci pro něj všechny sdružené záznamy z
phase_group_round
:
$this->related('phase_group_round')->order('id ASC')->fetchAll();
NDB pokládá dotaz např.
SELECT `id`, `id_phase_group`
FROM `phase_group_round`
WHERE (`phase_group_round`.`id_phase_group` IN (78, 79, 80, 81))
ORDER BY `phase_group_round`.`id_phase_group`, `id` ASC
kde 78,79,80,81 jsou id
z tabulky phase_group
,
které patří k jednomu řádku z phase
.
Je to tím, že jsou ty vztahy neurčující a primární klíč je jen to
id
?
Při procházení výsledků se vrací jen ty patřící dané
phase_group
, což je v pořádku – proč se ale musely vracet
i ty, co nepoužiji? Zatím to řeším to přidáním podmínky
->where('id_phase_group', $this->id)
, která omezí počet
vrácených výsledků jen na ty adekvátní, ale v SQL stále zůstává ta
první podmínka s IN
.
Problém nastane, když chci vybrat jen jeden řádek z
phase_group_round
podle pořadí přes LIMIT
:
$this->related('phase_group_round')->order('id ASC')->limit(1, (int)$order)->fetch();
SQL je stejné jako výše (LIMIT chybí) a vrátí se pokaždé jen první
prvek. Ve zdrojových kódech třídy GroupedSelection
jsem našel,
že se klauzule LIMIT za určitých podmínek jednoduše smaže…
Musím si nechat vrátit všechny řádky a přes array_slice()
vybrat ten na požadovaném místě.