Použití paginatoru na query s JOINem

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

Zdravím, potřeboval bych poradit proč mi nejde použít visual paginator na select s joinem. Používám nette database a query příkaz vypadá asi takt:

->query('SELECT * FROM user u JOIN friend f ON f.user_id = ' . $userId . ' WHERE u.id = f.friend_id ORDER BY u.nickName ASC');

a končí to na chybě v paginátoru při počítání vypsaných položek:

$paginator->itemCount = $values->count('*'); // Call to undefined method Nette\Database\Statement::count();

Asi budu mít nějakou chybu v tom selektu, ale bez paginatoru se položky normálně vypíšou…

David Matějka
Moderator | 6445
+
0
-

takhle ti to nepude, musel bys pouzit selection (->table(...))

Oli
Člen | 1215
+
0
-

Ti to píše. Metoda query vrací Nette\Database\Statement a ten neobsahuje ->count(). Bud to muzes zkusit zavolat takhle: count($value);

a nebo to přepsat s použitím ->table(), která vrací Nette\Database\Table\Selection a na ní už můžeš zavolat metodu ->count()

riski
Člen | 53
+
0
-

Aaaha a můžete naznačit jak by ten příkaz měl vypadat v mém případě ? Jako chapu ->table(‚user‘)->select(‚*‘)->where()… ale s tím joinem to bude jak ?

Oli
Člen | 1215
+
0
-

Bude to nějak takhle:

$selection->where('friend.user_id = ?', $userId)->order('nickName ASC');

viz.: Filtering by another table value

riski
Člen | 53
+
0
-

Oli napsal(a):

Bude to nějak takhle:

$selection->where('friend.user_id = ?', $userId)->order('nickName ASC');

viz.: Filtering by another table value

Díky za radu, ale ještě by mě zajímalo proč při tomto :

$selection->where('friend.user_id = ?', $userId);

mi to hodí chybu že neexistuje slupec user.friend_id (on taky neexistuje ale nechápu proč by tam měl být ?) chci vypsat kamarády uživatele podle vazební tabulky…

honos
Člen | 109
+
0
-

riski napsal(a):

Zdravím, potřeboval bych poradit proč mi nejde použít visual paginator na select s joinem. Používám nette database a query příkaz vypadá asi takt:

->query('SELECT * FROM user u JOIN friend f ON f.user_id = ' . $userId . ' WHERE u.id = f.friend_id ORDER BY u.nickName ASC');
...

Myslim ze na to je methoda getRowCount()

EDIT: Zkuste hledat lidi … je tu API !!!

Editoval honos (1. 2. 2014 6:08)