nette\database problem s propojenim tabulek

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

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

Š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
+
0
-

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
+
0
-

@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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

@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
+
0
-

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
+
0
-

@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
+
0
-

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 :)