Odkazy: dibi | API reference

Forum: [česky] [english]

dibi fórum

tiny ‘n’ smart
database layer

Nejste přihlášen(a)

#1 před 5 měsíci

kopec
Nový člen
Registrovaný: 16. 12. 2011
Příspěvky: 5

DibiFluent, LIMIT, OFFSET a fetch()

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)

 

#2 před 5 měsíci

Milo
dibi guru
Registrovaný: 4. 5. 2010
Příspěvky: 298

Re: DibiFluent, LIMIT, OFFSET a fetch()

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í.

 

#3 před 4 měsíci

kopec
Nový člen
Registrovaný: 16. 12. 2011
Příspěvky: 5

Re: DibiFluent, LIMIT, OFFSET a fetch()

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. 10:54)

 

Zápatí