vytáhnutí dat ze jiné tabulky (ref, related)

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mordare
Začátečník | 117
+
0
-

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

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)

mordare
Začátečník | 117
+
0
-

takhle mi to nefunguje. když to tam zapíšu tak mi laděnka vyhodí chybu Call to a member function related() on a non-object

ViPEr*CZ*
Člen | 814
+
0
-

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

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

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á.

mordare
Začátečník | 117
+
0
-

mno při tomto zápisu mi to píše No reference found for $council_task_part->clenove

a k tomu pojmenování, určitě se podívu.

ViPEr*CZ*
Člen | 814
+
0
-

mordare napsal(a):

mno při tomto zápisu mi to píše No reference found for $council_task_part->clenove

a k tomu pojmenování, určitě se podívu.

Používáte fakt InnoDB? Jakou reflexi používáte?

mordare
Začátečník | 117
+
0
-

opravdu je vše přez innoDB ještě sem to kontroloval. kontroloval sem taky eště ty cizí kklíče a opravdu jsou tabulky council_task_part a clogin napojené do tabulky clenove.

ViPEr*CZ*
Člen | 814
+
0
-

A moje druhá otázka? Používáte ConventionalReflection nebi DiscoveredReflection?

mordare
Začátečník | 117
+
0
-

toto neni můj projekt, ale pouze projekt do kterého dodělávám část. V configu sem našel discovered. Mohl bych se zeptat jaký je mezi tím rozdíl?