vytáhnutí dat ze jiné tabulky (ref, related)
- mordare
- Začátečník | 117
zdravím už chvíli tady zápasím s vytáhnutím dat. mám takovouto strukturu DB
teď o co se snažím. na stránce se mi vypíše článek z tabulky
coucil_tasks
a po dním by se měly vypsat všechny příspěvky
z tabulky council_task_part
. samozdřejmě u těch příspěvků
musí být vypsané kdo je odeslal. v tabulce council_task_part
je
pod submitterem
ID člena z tabulky clenove
, ale já
potřebuju aby se mi na stránce vypsalo jméno které je v tabulce
clogin
ve sloupci login
skoušel jsem to nějak takhle.
Model
public static function getTaskPart($_id)
{
$_part = self::$_conn->table(self::$_tableTasksPart)->select('*')->where('tid', $_id);
return $_part;
}
Šablona
{if $parts != ""}
{foreach $parts as $part}
<p>
{$part->submitted|date:'%d.%m.%Y, %H:%M'}
{var $part->ref('clenove')->where('id', $part->submitter) as $clen}
{var $clen->ref('clogin')->where('clen', $clen-id) as $submitter}
{$submitter}
<br />
{$part->text}
</p>
<br /><br /><br /><br />
{/foreach}
{/if}
což mi nějak nefunguje.
Děkuji za radu.
- nanuqcz
- Člen | 822
Ahoj :-)
mordare napsal(a):
což mi nějak nefunguje.
Tzn, píše chybu? Nebo nevypíše nic?
Zkusil bych to třeba takhle:
{if $parts->count()}
{foreach $parts as $part}
<p>
{$part->submitted|date:'%d.%m.%Y, %H:%M'}
{$part->submitter->jmeno} {$part->submitter->prijmeni}
{$part->submitter->related('clogin')->fetch()->username}
<br />
{$part->text}
</p>
<br /><br /><br /><br />
{/foreach}
{/if}
Psáno z hlavy, případné chybky si určitě opravíš podel laděnky. Taky předpokládám, že používáš InnoDB (v MySQL) a že máš správně nastavené cizí klíče. Ale kdyby přecijen, klidně se ještě ptej ;-)
EDIT: Podívej se, jak se používá makro var, v tvojem kódu jsi ho měl špatně (možná proto ti nefungoval)
Editoval nanuqcz (1. 9. 2012 14:15)
- ViPEr*CZ*
- Člen | 814
Tohle {if $parts->count()} asi bude zbytečný. Podle modelu to vrací
instanci Selection, která je implementovaná přes Iterator, tak že to buď
vrátí prázdný pole a přes foreach to jen neprojde a testovat to na count
přes if je tam navíc.
Skontrolujte vlastnosti databáze jak psal nanuqcz.
Jakou používáte Reflexi? Tohle makro něco najde:
{$part->submitter->jmeno} ?
- mordare
- Začátečník | 117
tu podmínku IF tam mám z důvodu že když v nebude žádný comment tak
proč už tam zbytečně rvát foreach ktery stejně nic neprojde.
A makro {$part->submitter->jmeno} napsal nanuqcz (asi) jako příklad
podle strukturty tabulek by to nemělo co tahat.
Tak ve zkratce ještě jednou shrnu co potřebuju. V tabulce council_task_part ve sloupci submitter je id toho kdo postnul komentář. ale při vypisování potřebuju místo tohoto id vypsat hodnotu, která je v tabulce clogin.
- ViPEr*CZ*
- Člen | 814
No tak každopádně to tam píšete navíc… zjednoduší to práci ;-)
- Jestli jsem to pochopil tak by to mělo jít takto
- kde $part je ActiveRow ze Selection z tabulky council_task_part
{$part->clenove->related('clogin')->login}
Doufám, že jsem to nespletl, každopádně by to mělo sloužit k nakopnutí. A doporučuji se kouknout do dokumentace, protože ta konvence pojmenování klíčů je děsivá.