Chyba při vypisování dat z databáze

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

Hoj, mám takový problém s vypsáním dat z databáze. V prvním případě, kde mám tabulku „polozka“ propojenou s tabulkou „kategorie“, vypisuji data z tabulky „kategorie“ mezi daty z tabulky „polozka“ pomocí

{$polozka->ref('id_kategorie')->nazev}

A data se vypisují v pořádku.
To samé ale potřebuji udělat s tabulkami „uzivatel“ a „typuctu“. Jenže když použiji stejný výpis:

{$user->ref('id_typuctu')->nazev}

tak mě laděnka vyhodí chybu „Trying to get property of non-object“.

Pro lepší přestavu návrh tabulek.

llsm
Člen | 121
+
0
-

Tento zapis pristupu k parametru ma problem v tom, ze kdyz se z db nic nevrati a vysledek je NULL, tak se na NULL snazis pristoupit k nazev, coz je samozrejme nesmysl… Zkus si vypsat Debuggerem $user->ref('id_typuctu')

xciza
Člen | 194
+
0
-

Ale jak je potom možné, že u prvního případu to funguje? Jinak jsem zkoušel dumpnout $user->ref(‚id_typuctu‘) a to nic nevypíše- ani chybu ani data

Marax
Člen | 28
+
0
-

Mno je to možné třeba v případě, že v tabulce typuctu, žádný odpovídající záznam není. Vypisuje ti Debugbar dotazy do databáze? je tam ten select na tabulku typuctu? Pokud jo, tak si ho zkus manuálně pustit přímo nad databází (třba v admineru), jestli něco dostaneš.

xciza
Člen | 194
+
0
-

Nevím jak je to možné, ale teď jsem zkusil původní variantu vypsání

{$user->ref('id_typuctu')->nazev}

a už to dělá to co má…

xciza
Člen | 194
+
0
-

Tak jsem si udělal správu uživatelů a po přidání nového uživatel už to zase nejde. Hází chybu Trying to get property of non-object. A debug bar vypíše pouze dotaz pro

{$user->username}

který je nad požadovaným

{$user->ref('id_typuctu')->nazev}

Prosím, co by to mohlo tedy dělat?? Odpovídající záznamy v tabulkách mám…

marek-m
Člen | 66
+
0
-

nebude to skor tym, ze $user je premenna identity, ktora je vkladana do latte automaticky, cili pristupujes k uplne k niecomu inemu.

xciza
Člen | 194
+
0
-

Mám to udělané tak, že mám továrničky pro přístup do db, ze které pak tahám data:

public function renderDefault() {
       $this->template->uzivatel = $this->context->createUzivatel();
   }

no a na základě tohoto mám v latte tento kód:

{foreach $uzivatel as $user}
           <tr>
               <td>{$user->username}</td>
               <td>{$user->ref('id_typuctu')->nazev}</td>
	    </tr>
{/foreach}

Čili když chci z tabulky „uzivatel“ vypsat jeho username, tak to jde v pohodě, ale když chci z propojené tabulky „typuctu“ vypsat název účtu, ke kterému je daný user přiřazen, tak to prostě nejede.

Šli by tedy tabulky propojit jiným způsobem, abych dostal to co potřebuji?

EDIT: tak už to dělá i na dalších co jsem zkusil, ne jenom u těch uživatelů

Editoval xciza (28. 3. 2012 16:05)

.:M@rt!n:.
Člen | 201
+
0
-

Nikdo neví??

xciza
Člen | 194
+
0
-

Vyřešeno

petr.pavel
Člen | 535
+
0
-

@xciza: Jak?

Ber tohle fórum jako studnici znalostí. Když napíšeš svoje řešení, pomůžeš ostatním se stejným problémem.

xciza
Člen | 194
+
0
-

Jo jasně, omlouvám se problém byl v tom že ve

{foreach $uzivatel as $user}

jsem proměnnou $uzivatel přepsal na $user. Jenže ta se používá i jako globální proměnná takže to dělalo neplechu. Stačilo tuto proměnnou přejmenovat na něco jiného a vymazat temp. ;)