citanie udajov z inych tabuliek (selection)

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

Mam jednu otazku. ako ziskam data z inych tabuliek na zaklade vztahov co su medzi tabulkami? Ak ziskam z databazy jeden riadok (ActiveRow) – napriklad ak sa dotazujem na vlastnosti clanku, tak potom viem v latte nacitat napr. autora clanku (z inej tabulky) – article->user->username. Takto mi to funguje zial iba ked pracujem s jednym zaznamom. Ak chcem pracovat s viacerymi (napriklad chcem vypisovat zoznam vsetkych clankov a ich autorov) tak mi vypise chybovu hlasku, ze user nepozna. V com moze byt problem? V prvom pripade ziskavam jeden riadok klasicky cez fetch(), v druhom pripade iba cez table(). Dakujem.

Unlink
Člen | 298
+
0
-

To čo hľadáš sa volá related()
https://doc.nette.org/…ase/explorer#…

EDIT
aha, teraz čítam že máš problém s ref(), skús sem dať ukážku kódu ktorý používaš.

Editoval Unlink (14. 9. 2015 17:27)

Matej123
Člen | 150
+
0
-

takto to mam v ArticleManager :

	public function getArticles() {
	    return $this->database->table(self::TABLE_NAME)
	                ->select('title,url,description,date_of_public, numOfReading')
	            ->order(self::COLUMN_ID . ' DESC');
	}

v presenteri len volam jednoducho :

$articles = $this->articleManager->getArticles();
$this->template->articles = $articles;

a v sablone by som chcel volat nejak username toho autora : napr. $articles->user->username

pozn. dobre mi to funguje ak nacitavam iba jeden riadok pomocou funkcie :

public function getArticle($url) {
     return $this->database->table(self::TABLE_NAME)->where(self::COLUMN_URL, $url)                       		->select('article_id,title,url,description,content,user_id,date_of_public,numOfReading')->fetch();
 }

potom klasicky v sablone zavolam $article->user->username a ide to

Matej123
Člen | 150
+
0
-

Unlink napsal(a):

To čo hľadáš sa volá related()
https://doc.nette.org/…ase/explorer#…

EDIT
aha, teraz čítam že máš problém s ref(), skús sem dať ukážku kódu ktorý používaš.

uz som to vyriesil , dal som do selectu user.username AS username a uz to ide :)

Unlink
Člen | 298
+
0
-

No problém je v tom, že v prvom príklade neselectuješ user_id takže to nevie spojiť.

Ešte by som mal jednu radu, ak používaš NDBT (nette database table) tak nemusíš uvádzať ->select() lebo jednou z feature NDBT je to, že automaticky selectuje len stĺpce ktoré sú potrebné.

Matej123
Člen | 150
+
0
-

Unlink napsal(a):

No problém je v tom, že v prvom príklade neselectuješ user_id takže to nevie spojiť.

Ešte by som mal jednu radu, ak používaš NDBT (nette database table) tak nemusíš uvádzať ->select() lebo jednou z feature NDBT je to, že automaticky selectuje len stĺpce ktoré sú potrebné.

dakujem, uz rozumiem. Select som tu pouzil preto, lebo dalej v tom selecte mam nieco take (points/numberOfPoints) AS av_review – kde pocitam priamo priemerne hodnotenie, pri com v databaze mam ulozene len body a pocet bodovani. (neuvadzal som tu cely select)

David Matějka
Moderator | 6445
+
0
-

@Matej123 pro priste – koukni se, jak formatovat kod, ted jsem to za tebe upravil.

Matej123
Člen | 150
+
0
-

David Matějka napsal(a):

@Matej123 pro priste, koukni se, jak formatovat kod, ted jsem to za tebe upravil.

dakujem, myslel som na to, ale nevedel som ako, pardoon :)