relacia tabulky na tabulku
- duskohu
- Člen | 778
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
- duskohu
- Člen | 778
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
- jtousek
- Člen | 951
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
{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)
- duskohu
- Člen | 778
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}
- duskohu
- Člen | 778
tak som to cele porozbaloval a ulozil ako html :-)
http://www.ulozto.sk/…/ladenka-rar
- duskohu
- Člen | 778
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
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)