Oznámení
DibiFluent, LIMIT, OFFSET a fetch()
před 8 lety
- kopec
- Člen | 3
Ahoj, potřebuji získat jeden konkrétní řádek v pořadí, ale vrací mi to chybu kvůli nesprávnému pořadí LIMIT a OFFSET:
<?php
$query->limit(1)->offset($offset)->fetch();
//...LIMIT 1 OFFSET [cislo] LIMIT 1
$query->offset($offset)->fetch();
//...OFFSET [cislo] LIMIT 1
?>
Napadá mě
<?php
$query->limit(1)->offset($offset)->fetchAll();
return $query[0];
?>
ale to není moc elegantní.
S tím možná souvisí i další věc, a to sice, že se LIMIT nepřepisuje, ale přidává
<?php
$query->limit(1)->limit(2);
?>
vrací celkem nelogicky …LIMIT 1 LIMIT 2
místo očekávaného
…LIMIT 2
.
Editoval kopec (18. 12. 2011 14:03)
před 8 lety
- Milo
- Nette Core | 1119
kopec napsal(a):
Ahoj, potřebuji získat jeden konkrétní řádek v pořadí, ale vrací mi to chybu kvůli nesprávnému pořadí LIMIT a OFFSET:
<?php $query->limit(1)->offset($offset)->fetch(); //...LIMIT 1 OFFSET [cislo] LIMIT 1 $query->offset($offset)->fetch(); //...OFFSET [cislo] LIMIT 1 ?>
Jakou verzi používáš? Mně se pořadí vždy nastaví správne LIMIT x OFFSET y. Ve verzi 1.5rc i 1.2.
Napadá mě
<?php $query->limit(1)->offset($offset)->fetchAll(); return $query[0]; ?>
ale to není moc elegantní.
To je bug. Asi ho ani nelze obejít bez editace zdrojáků. Můžeš si
DibiFluent::fetch()
upravit takto:
public function fetch()
{
if ($this->command === 'SELECT') {
$fluent = clone $this;
return $this->connection->query($fluent->limit(1)->_export())->fetch();
} else {
return $this->connection->query($this->_export())->fetch();
}
}
S tím možná souvisí i další věc, a to sice, že se LIMIT nepřepisuje, ale přidává
<?php $query->limit(1)->limit(2); ?>
vrací celkem nelogicky …
LIMIT 1 LIMIT 2
místo očekávaného …LIMIT 2
.
Opět… jakou verzi máš? Mě funguje přepisování.
před 8 lety
- kopec
- Člen | 3
Aye, moje chyba, koukal jsem na verzi a nějak mi nedošlo, že 1.5-rc1 není to samé, jako 1.5-rc, takže teď jsem updatoval a první problém je samozřejmě pryč.
//vyskytl se tedy nový ve formě fatálu, že třída DibiNettePanel neexistuje, ale to stačilo kdesi v DibiConnection tuto třídu načíst).
Druhý problém se vyřešil prvním, protože teď právě můžu udělat tu úpravu zdrojáku, kterou jsem předtím nemohl (limit se nepřepisoval).
Díky moc!
Editoval kopec (10. 1. 2012 10:54)