nette\database problem s propojenim tabulek
- zdrhal
- Člen | 42
Ahoj,
pročítal jsem fórum, ale nenašel jsem nikde můj problém. Chtěl bych poprosit o konkrétní radu jak to přepsat aby to chodilo.
Mám tabulku events (id, id_user, id_tempo, id_activity, date)
Dále mám tabulky tempos (id, tempo) a activities (id, activity)
Uživateli chci vypsat jeho events s příslušným tempem, aktivitou a datumem.
Mé řešení je:
Module:
/** @return Nette\Database\Table\Selection */
public function findAll()
{
// vytahnuti dat z db pro konkretniho uzivatele
$user = Nette\Environment::getUser();
return $this->database->table('events')->where('id_user', $user->getIdentity()->getId());
}
Presenter:
public function renderDefault()
{
// probehle eventy
$this->template->events = $this->events->findAll()->where('DATEDIFF(CURDATE(), date) > 0')
->order('date DESC')->order('id');
}
Ale moje řešeni mě vypíše konkrétní hodnoty id zapsaných v events, ale já chci id_tempo nahradit za tempo a id_activity za activity. Nevíte někdo prosím jak to udělat?
Moc děkuji všem co se nad tím zamyslí a užitečně mi poradí. Odpovědi směřující na moje iq prosím vynechte, každý nějak začínal.
Přeji hezký den,
Roman Prchal
Editoval zdrhal (28. 3. 2014 14:35)
- David Matějka
- Moderator | 6445
viz dokumentace a priklad s relaci book a author
v tvem pripade tedy pri foreach-i
{foreach $events as $event}
{$event->tempo->tempo}
{$event->activity->activity}
{/foreach}
(musis mit innodb a spravne nastavene FK)
- Jan Suchánek
- Člen | 404
Do findAll nedávej žádné statické volání $user = Nette\Environment::getUser();, findAll použíj na získání selection celé tabulky.
Model:
function getTable($tableName = NULL)
{
if(!$tableName) $tableName = $this->getTableName();
return $this->dbContext->table($tableName);
}
function findByUserId($userId)
{
return $this->getTable("event")->where('user_id = ?', $userId)->where( ...)->order('date DESC');
}
function getEvents(
Presenter:
public function renderDefault()
{
// probehle eventy
$this->template->events = $this->events->findByUserId($user->getIdentity()->getId());
}
Editoval jenicek (28. 3. 2014 16:12)
- zdrhal
- Člen | 42
Matej:
Díky za post. Ručně jsem upravil na innodb a v grafickém php adminovi
nastavil vazby. Přesto mi to píše error:
Cannot read an undeclared column „tempo“ . Zkusím DB
vytvořit novou přímo dle správného zápisu co jsem našel zde
Pak dám vědět jak jsem dopadl. Ještě jednou díky za tip.
Jendo:
Též děkuji za připomínku. Smím vědět proč je to tak špatné? Rychlost? Bezpečnost? Kompaktibilita?
- Jan Suchánek
- Člen | 404
Špatně to rozhodně není, ale je to praktické?
Nette\Environment Deprecated
Jendo:
Též děkuji za připomínku. Smím vědět proč je to tak špatné? Rychlost? Bezpečnost? Kompaktibilita?
Mě se líbí s Nette\Database\Context – YetORM
Editoval jenicek (28. 3. 2014 15:51)
- zdrhal
- Člen | 42
jenicek napsal(a):
Špatně to rozhodně není, ale je to praktické?
Nette\Environment Deprecated
Jendo:
Též děkuji za připomínku. Smím vědět proč je to tak špatné? Rychlost? Bezpečnost? Kompaktibilita?
Aha to máš pravdu, sem v nette nový. Vše se snažím nějak odkoukat z tutoriálů a různých návodů a ty jsou napříč všema verzema. Tak vždy něco čapnu a různě to lepím a pak bouchám šáňo, pokud to funguje. Jsem tu trochu zmatený je to můj první framework ve kterém dělám, takže občas nechápu i myšlenku. Vždy jsem vše bouchal v čistém PHP, ale bakalářská práce mě donutila k frameworku. Díky za radu.
- Jan Suchánek
- Člen | 404
@zdrhal: Tak to jsme na tom stejně :) Jde o to nezbouchat všechno do jednoho, ale používat nějaký styl kompozice a pokud metoda nebo třída má nějakou závislost předávat si jí stejně jako v klasickém funčkním PHP.
Mě se líbí YetORM, Kdyby\Events a DIC továrničky na komponenty.
Pokud se používá víc Repozitářů je vhodné pak uvažovat nad tím zda je nezdružit pod jednu fasádu.
Editoval jenicek (28. 3. 2014 16:13)
- zdrhal
- Člen | 42
matej21 napsal(a):
viz dokumentace a priklad s relaci book a author
v tvem pripade tedy pri foreach-i
{foreach $events as $event} {$event->tempo->tempo} {$event->activity->activity} {/foreach}
(musis mit innodb a spravne nastavene FK)
Tak to funguje parádně děkuji moc za pomoc, pánbůh ti to oplať na dětech :D :) DÍK
- zdrhal
- Člen | 42
jenicek napsal(a):
@zdrhal: Tak to jsme na tom stejně :) Jde o to nezbouchat všechno do jednoho, ale používat nějaký styl kompozice a pokud metoda nebo třída má nějakou závislost předávat si jí stejně jako v klasickém funčkním PHP.
Mě se líbí YetORM, Kdyby\Events a DIC továrničky na komponenty.
Pokud se používá víc Repozitářů je vhodné pak uvažovat nad tím zda je nezdružit pod jednu fasádu.
To zní fajn. Mrknu určitě na to. Díky ti za cenné rady. Snad se toto vlákno bude hodit i dalším.
EDIT: Tak normálně já používám pořád DIC aniž bych o tom věděl, ale bylo to tak v examplu 2.1 a podle toho jsem pak postupoval dále. :D
Editoval zdrhal (28. 3. 2014 16:48)
- Jan Suchánek
- Člen | 404
Zkus ještě mrknout na pěknou Šamanovu ukázku využití Trait, má tam i připojení s extension na Dibi.
EDIT: Kde si to měl?
Editoval jenicek (28. 3. 2014 16:51)
- zdrhal
- Člen | 42
jenicek napsal(a):
Zkus ještě mrknout na pěknou Šamanovu ukázku využití Trait, má tam i připojení s extension na Dibi. Mohlo by to ušetřit čas a zkrácení kódu.
Děkuji hodím po tom okem :)
- Jan Suchánek
- Člen | 404
@zdrhal: V jakém example k Nette 2.1 si viděl Nette\Environment::getUser(); ?
Editoval jenicek (28. 3. 2014 16:53)
- zdrhal
- Člen | 42
jenicek napsal(a):
@zdrhal: V jakém example k Nette 2.1 si viděl Nette\Environment::getUser(); ?
To jsem vygooglil potreboval jsem dostat v modulu identitu ze ktere jsem si vzal id abych vypsal Eventy jen pro prihlasene uzivatele. Me osobne v me hlave prijde lepsi rovnou vybrat radky se kteryma budu pracovat nez tahat celou tabulku a na ni pak delat dalsi operace. Kdyz bude db velika tak budu potrebovat dost pameti ne? Nebo smyslim spatnym smerem?
K tem tovarnickam jak jsi psal jsem koukal z rychliku predtim a spatne jsem to pochopil. :D A hned jsem si tam nasel kus podobny memu kodu v sekci „takhle to nedelat“ :D Na cez jsem reagoval ze to tak delam od zacatku a kdyz sem si to pak procital pozorneji, tak to byl popis toho jak to nedelat :D
Editoval zdrhal (28. 3. 2014 17:09)
- Jan Suchánek
- Člen | 404
@zdrhal: Davidův článek o Singletonech.
Celý je to o tom, že předáváš přez neon závislosti, tak aby si nebyl svázaný přímo v kódu nějakým statickým peklem, které budeš muset furt přepisovat + ještě když je to zkomplikované nějakým děděním tak je to naprostý chaos.
Editoval jenicek (28. 3. 2014 17:22)
- zdrhal
- Člen | 42
jenicek napsal(a):
@zdrhal: Davidův článek o Singletonech.
Celý je to o tom, že předáváš přez neon závislosti, tak aby si nebyl svázaný přímo v kódu nějakým statickým peklem, které budeš muset furt přepisovat + ještě když je to zkomplikované nějakým děděním tak je to naprostý chaos.
Aha tak tydle vidle :) Hele já na tebe nenarazit tak si na ty melcine umlatim ploutve. Kdyby se tu daly rozdavat plusy tak dostanes ode me zlatyho bludistaka. Moc diky hezky si me navedl na spravnou stopu :)