Autor | Zpráva | ||
---|---|---|---|
kubatt Profil |
#1 · Zasláno: 3. 7. 2014, 12:31:54
Ahoj mám problém v nette v metodě Database Table není příkaz Join a nevím ani jak by to tedy šlo... ale problém je vtom že mám query dotaz
SELECT Topics.* FROM Topics LEFT JOIN Posts on Topics.Id = Posts.ContentId GROUP BY Topics.ContentId ORDER BY Posts.TimeCreated DESC $topic->ref('Content') Děkuji |
||
Jan Tvrdík Profil |
#2 · Zasláno: 3. 7. 2014, 13:15:34
kubatt:
Jakým způsobem ten dotaz pokládáš? Jakou chybu to píše? |
||
kubatt Profil |
Pokládám to takto
$topics = $database->query('SELECT Topics.* FROM Topics LEFT JOIN Posts on Topics.Id = Posts.ContentId GROUP BY Topics.ContentId ORDER BY Posts.TimeCreated DESC'); Call to undefined method Nette\Database\Row::ref() $topic->ref('Content') |
||
Jan Tvrdík Profil |
#4 · Zasláno: 3. 7. 2014, 13:20:51
kubatt:
Objekt Nette\Database\Row nemá metodu ref . Tu metodu má Nette\Database\Table\ActiveRow . Nemůžeš kombinovat ručně psané SQL dotazy s magickým přístupem, který nabízí ref .
|
||
kubatt Profil |
Já to vím.. a proto se tady ptám jak to vyřešit? Abych se tak dostal na ten cizí klíč...
Třeba jak přepsat ten sql dotaz do Nette |
||
Jan Tvrdík Profil |
kubatt:
Zkoušel jsi něco jako $context->table('Topic')->order(':Post.TimeCreated DESC') ?
|
||
kubatt Profil |
#7 · Zasláno: 3. 7. 2014, 13:29:54
Jo jen bez te dvojtečky a vypíše to chybu
No reference found for $Topics->Posts |
||
matej21 Profil |
#8 · Zasláno: 3. 7. 2014, 13:52:58
Pouzivas InnoDB a mas spravne nastavene cizi klice? ty jsou pro fungovani NDBT (pri pouziti discovered reflection) nezbytne.
Ta dvojtecka, jak pise Honza, je dulezita. Jen teda misto Post pouzij Posts, jestli spravne chapu strukturu databaze (ale stejne ji radeji ukaz :)) Ale obavam se, ze ten dotaz nebude fungovat tak, jak si prejes (ta kombinace order a group by).. |
||
kubatt Profil |
#9 · Zasláno: 3. 7. 2014, 14:08:07
Ono to celé funguje když napíšu jen
$topics = $database->table('Topics') Struktura tabulky Topics ![]() Struktura tabulky Posts ![]() |
||
Alphard Profil |
#10 · Zasláno: 5. 7. 2014, 12:09:30
kubatt:
Jestli jste našel řešení a zamknul vlákno úmyslně, bylo by dobré napsat sem to řešení pro ostatní hledající. Jestli jste to tu zamčel omylem, nyní jsem to napravil. |
||
kubatt Profil |
#11 · Zasláno: 5. 7. 2014, 12:16:49
No ja sem to tu nechtěl psát protože sem to nakonec vyresilo tak ze sem to nepouzil a udělal jsem to přes $ databaze->query
a ref sem nahradil klasickým query dotazem výsledný sql dotaz je ale tenhle SELECT Topics.* FROM Topics LEFT JOIN Posts on Topics.ContentId = Posts.ContentId JOIN Content on Topics.ContentId = Content.Id GROUP BY Topics.ContentId ORDER BY Topics.Pin DESC, CASE WHEN COUNT( Posts.TimeCreated ) = 0 THEN Content.TimeCreated ELSE Posts.TimeCreated END DESC takže z toho vyplývá ze to v Nette proste nejde :) takže to nemá vlastně reseni ne? :P |
||
Časová prodleva: 11 let
|
0