relacia tabulky na tabulku

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

Ahojte,
viete mi niekto poratit:

mam tabulku

task
id, name
pozorovatel
id, user_id, task_id
user
id, name

1. nacitam si v TaskPrezenter zoznam uloh a poslem sablone:

$this->template->tasks = $this->context->createTask();

2. vykreslujem zoznam uloh

{foreach $tasks as $task}
	{$task->id}
	{$task->name}

{/foreach}

a neviem ako urobim to aby som ku kazdej ulohe vypisal zoznam pozorovatelov

jtousek
Člen | 951
+
0
-
{foreach $tasks as $task}
        {$task->id}
        {$task->name}
	{foreach $task->related('pozorovatel') as $pozorovatel}
		{$pozorovatel->user_id}
		{*případně*}
		{$pozorovatel->user->name}
	{/foreach}
{/foreach}
duskohu
Člen | 778
+
0
-

dakujem, ale vracia mi

PDOException

No reference found for $task->related(pozorovatel)

duskohu
Člen | 778
+
0
-

nemal som cudzi kluc, pre to hlaska
ale problem je v tom ze mi to vracia relaciu na pozorovatel id nie na task_id

takze ak mam ulohu
id = 1
id = 2

a mam pozorovatelov:
id=1
user_id =1

task_id=1

id=2
user_id =2
task_id=1

a ono mi to nevrati zoznam pozorovatelov k ulohe
uloha id_i, pozorovatel id=1, pozorovatel id=2

ale k ulohe 1 mi vrati jedneho pozorovatela id 1
a kulohe 2 mi vrati jedneho pozorovatela id 2

duskohu
Člen | 778
+
0
-

takze dotretice, dakujem,
delete cache … :-)

jtousek
Člen | 951
+
0
-

Hezky. :-D Tímhle způsobem se naučíš nejvíc. ;-)

duskohu
Člen | 778
+
0
-

No este ked mozem vies mi poradit aka je standarta ked pouzivam dvojslovne nazvy stlpcov
napr: task end co odporucas??? task-end, task_end, taskEnd … ????

jtousek
Člen | 951
+
0
-

V databázi je většinou nejlepší používat podtržítkovou notaci. Pomlčky mají problém v tom, že z toho pak neuděláš vlastnost objektu ($tak->task-end nefunguje). To poslední jsem kdysi zkoušel, byl tam problém v tom, že se někde po cestě vše zkonvertovalo na malá písmena takže jsem si moc nepomohl.

EDIT: Žádný standard to není, jde jen o většinově dodržovanou konvenci.

Když už se ptáš na rady, tak ti dám ještě jedno doporučení. Nemíchej české a anglické názvy proměnných, tříd, funkcí, tabulek, sloupců etc. – v uvedeném příkladu mícháš „task“ a „pozorovatel“. Většina lidí používá všude pouze anglické názvy.

Editoval jtousek (15. 7. 2012 23:57)

duskohu
Člen | 778
+
0
-

takze asi budem pouzivat to podtrzitko, ale dakujem velmi pekne, aj za dalsiu radu … :-)

duskohu
Člen | 778
+
0
-
{foreach $tasks as $task}
        {$task->id}
        {$task->name}
        {foreach $task->related('pozorovatel') as $pozorovatel}
                {$pozorovatel->user_id}
                {*případně*}
                {$pozorovatel->user->name}
        {/foreach}
{/foreach}

ako sa da osetrit ked: $pozorovatel->user->name resp, $pozorovatel->user_id ale odkazujem na $pozorovatel->user->name neexistuje aby nehadzalo:

Invalid argument supplied for foreach()
<?php echo Nette\Templating\Helpers::escapeHtml($pozorovatel->user->name, ENT_NOQUOTES) ?>

Editoval duskohu (16. 7. 2012 8:52)

jtousek
Člen | 951
+
0
-

To je nějaký divný. V escapeHtml nikde žádný foreach není. Mohl bys sem hodit laděnku? I když tak trochu očekávám že na to mezitím přijdeš sám. :-)

duskohu
Člen | 778
+
0
-

No to riesim uz od vcera celu noc :-( .....
Akoto mam realne:

tabulka: task
id, task_name

tabulka: executor
id, uder_id, task_id

tabulka: user
id, name

1.pokial mam list taskov kde sa nenachadza ziaden zaznam ktory ma executor tak to prebehne ok
2. pokial mam list taskov kde sa nachadza zaznam ktory ma executor ale zaznam s executor je na prvom mieste tabulky tak je to ok
3. pokial mam list taskov kde sa nachadza zaznam ktory ma executor ale zaznam s executor nie je na prvom mieste tabulky tak to padne

{foreach $tasks as $task}
      {foreach $task->related('executor') as $executor}
        {$executor->user->name}<br>
      {/foreach}
{/foreach}

ladenka:
https://picasaweb.google.com/…8/16Jula2012#…

jtousek
Člen | 951
+
0
-

Ale klikatelnou. :-D (.html)

duskohu
Člen | 778
+
0
-

Ale ja to mam na localhoste … :-(

duskohu
Člen | 778
+
0
-

tak som to cele porozbaloval a ulozil ako html :-)
http://www.ulozto.sk/…/ladenka-rar

jtousek
Člen | 951
+
0
-

Aha, no tohle je bug… předpokládám, že hrach to dávno opravil ve své testovací větvi. Zkus smazat cache, možná to pomůže. Kdyby ne tak si před ten foreach v Nette\Database\Table\Selection.php:708 přidej $this->execute();.

duskohu
Člen | 778
+
0
-

No zmazal som cache dal som nete hracha ako si odporucil na vlakne: https://forum.nette.org/…mulara-do-db

a pridal ten riadok pred foreach $this->execute();

a stale Invalid argument supplied for foreach()

na tejto veci a este na tej v druhom vlakne som stravil celu noc a dnesok,
sice som len teraz v nette zacal ale nejako zacinam mat fazu ze to asi nerozchodim … :-(

inak ono to padne len ked, mam v zozname zaznak ktory ma pozorovatela a nenachadza sa na prvom mieste v zozname,
ak je zoznam bez pozorovatela, alebo je tam takyto zaznam a nachadza sa na prvom mieste v zozname, tak to prebehne

Editoval duskohu (16. 7. 2012 17:46)

jtousek
Člen | 951
+
0
-

Tak to mi tedy zůstává rozum stát. :-O Napiš mi přes nějakej IM komunikátor co mám v profilu. Podívám se na to sám, tohle už je divný.

hrach
Člen | 1834
+
0
-

Kluci diky za vasi spolupraci a analyzu @jtousek, ulehcili ste mi to. :)

jtousek
Člen | 951
+
0
-

Nemáš vůbec zač. :-) Díky moc že ses do toho tak rychle pustil a odhalil problém! Skvělá práce! ;-)

Pozn. Teď mi zůstává rozum stát nad otázkou „Jak sakra tyhle problémy debuguje?!“. XD

Jo ještě, psal jsi na řádek 148, jaký soubor jsi myslel? :-D

EDIT: Byls rychlejší. :-)

Editoval jtousek (17. 7. 2012 1:23)