NDB subselect, pokud není záznam v tabulce vrací offset
- Oli
- Člen | 1215
Ahoj,
nevím jestli to je bug nebo správné chování. Používám Nette 2.0.13.
Potřebuju udělat subselect dotaz, který vytvářím takhle:
$return = $this->_db->table('tabulka')
->where('id IN ? && id IN ?',
$this->_db->table('tabulka_tags')->select('tabulka_id')->where('tag_id = ?', $filter[0]),
$this->_db->table('tabulka_tags')->select('tabulka_id')->where('tag_id = ?', $filter[1])
);
To se přeloží na tohle:
SELECT `id`, `gallery_id`, `slug`, `attribute_top`, `date_publish`, `author_id`, `title`, `perex`
FROM `tabulka`
WHERE (
`id` IN (SELECT `tabulka_id` FROM `tabulka_tags` WHERE (`tag_id` = 232))
&& `id` IN (SELECT `tabulka_id` FROM `tabulka_tags` WHERE (`tag_id` = 242)))
V admineru to napíše správně Žádné řádky
. V Nette
ale…
Pokud oba subselecty naplní data, tak je všechno v pohodě a vrátí se
správný počet výsledků. Pokud ale jeden z nich vrátí nulový počet
řádků, tak celej dotaz vrátí notice Undefined offset: 1
.
Pokud mám jen jeden subselect, kterej mě vrátí nulovej počet řádků, tak je to v pohodě.
Jak tohle řešíte? Jde to nějak obejít nebo to používám špatně? Díky!
- hrach
- Člen | 1844
Jako oficialne nevyvijim nic, neoficialne vyvojim db. Nicmene release managment nedelam a moc nevim, v jakem stavu je 2.0, protoze neco je tam portovane, neco ne, neco nemuze, neco by mohlo, ale uz zavisy na tom, co nemuze, takze tak… s vetsi pravdepodobnosti spis moc nechystam, ale zatim ani nevim, kde presne ta chyba je, protoze ta cast kodu, kde se to zlobi , je stejna.
- Oli
- Člen | 1215
Tak jsem to teď testoval a v Nette 2.0.14 RC2 to stále stejně padá. V 2.1 RC4 to je v pohodě. Nevim jestli budu moct upgradovat na 2.1, bylo by možný se zkusit aspoň v rychlosti kouknout na 2.0? Nebo už to je uplně překopaný a zbytečný? Nebo jde to nějak obejít? Například konvertovat tu notice na exception?