JOIN v Nette\Database a stránkování výsledku

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Namespace
Člen | 81
+
0
-

Dobrý den,
narazil jsem na problém ve skládání dotazu pomocí Nette\Database a nemam potuchy, jak to řešit. Našla by se tu dobrá duše, která by mě alespoň nasměrovala správným směrem?

Mám tento SQL dotaz:

SELECT name, identify_id, affiliation
FROM users
LEFT JOIN affiliations ON affiliations.users_id=users.identify_id
ORDER BY identify_id DESC;

Není problém to napsat pomocí:

$this->db->table('users')->query('...');

Problém nastane až v okamžiku, kdy chci použít stránkování:

$this->db->query(""
		. "SELECT name, identify_id, affiliation "
		. "FROM ".self::TABLE_NAME. " "
		. "LEFT JOIN affiliations ON affiliations.users_id=users.identify_id "
		. "ORDER BY identify_id DESC "
		. "LIMIT $paginator->getLength(), $paginator->getOffset()");

$paginator z nějakého důvodu vrací nesmysly (například nevrací hodnotu $paginator->getOffset()).

Pokud to použiji takto:

$this->db->table(self::TABLE_NAME)->limit($paginator->getLength(), $paginator->getOffset());

Tak vše funguje korektně, jen bohužel bez JOIN

Odhaduji tedy, že problém $paginator způsobuje metoda query(), jen jsem nepřišel na způsob, jak se ji zbavit.

$paginator = new Nette\Utils\Paginator;
Nette 2.3.0

Za jakékoliv radu velice děkuji

greeny
Člen | 405
+
0
-

Skoro bych řekl, že v tom query("...") bys ten kus $paginator->getLength() měl obalit uvozovkama a tečkama:

$this->db->query(""
        . "SELECT name, identify_id, affiliation "
        . "FROM ".self::TABLE_NAME. " "
        . "LEFT JOIN affiliations ON affiliations.users_id=users.identify_id "
        . "ORDER BY identify_id DESC "
        . "LIMIT " . $paginator->getLength() . ", " . $paginator->getOffset());
Namespace
Člen | 81
+
0
-

V kódu to tak mám. Sem jsem to asi jen nějak divně zkopíroval.

Každopádně $paginator->getLength() se při použití s query() „zasekne“ na hodnotě 20 a víc již nic. Při limit() to funguje správně.