pouziti related nebo ref?

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

Zdravim,
potrebuji postrcit ohledne jednoho dotazu.
Mam tabulku news (id, created_when, active,…) a tabulku news_desc (id_news_desc, news_id, name,…). Pokud v metode actionEdit udelam
$editNew = $this->content->table('news')->get($postId); vypisu si data z tabulky news dle postId, potrebuji k tomu pridat jeden zaznam z relacni tabulky news_desc, kde news_id je cizi klic. Pokud pouziji ref (coz by asi v mem pripade bylo nej), tak se to zacne vazat na primarni klic tabulky news_desc. Pokud udelam pres related a podminku na to, aby to byl skutecne jen jeden zaznam, tak sice je, ale musim ho vypsat pres foreach.

Jde nejak udelat, abych dostal podobny vysledek, jako kdyz vypisuji z tabulky news, abych nemusel foreachem? Delam to v presenteru a vypisuji tim hodnoty z db do formularovych prvku.

Diky

Caine
Člen | 216
+
+2
-

Nemusis foreachovat, staci napr $news->related('news_desc')->where(...)->fetch() a dalsi fetch metody.

Jinak ref se pouziva z druhy strany, tj kdyz se ptas z news_desc na news..

Editoval Caine (1. 3. 2015 22:27)

thm
Člen | 147
+
-1
-

Nezkoušel jsi přímo říct přes který sloupec se to má propojit?

$newDescPost = $this->content->table('news')->get($postId)->ref('news_desc','news_id');

Nidky jsem s tím ale problém neměl, nastavuji v InnoDB cizí klíče a normálně to funguje.

lucasso
Člen | 7
+
0
-

caine – diky, to pomohlo, jsem pitomej… Nicmene v tuto chvili, kdyz to pouziju, jak pises, musim jeste vybirat sloupce pres select(), protože mi to vybere vsechny sloupce z tabulky news_desc, ale tabulka news se jen spojuje a nemam tam sloupce typu active, created, evented,… samozrejme to vypisu pres select a bezi to bez problemu, ale treba pro zjednoduseni respektive pro psani mene kodu by pro me byla zajimavejsi metoda bez toho vypisovani selectu…

thm – ne, takhle to prave spojit nejde, to jsem zkousel a navic je to presne to, co psal caine, ref je z druhe strany.

Caine
Člen | 216
+
+1
-

Asi by si chtel, aby NDBT generovalo SELECT * FROM... misto SELECT news_desc.* FROM...? To ale nejde, protoze Nettysti pouzivaj jako nazev pro prim. klice „id“ a ne „id_news_desc“. Proto, kdyz by se vybiralo pres *, tak by se sloupce se stejnyma nazvama navzajem prepisovaly, a u IDcek by to zpusobilo paseku (na foru uz par lidi s timhle problem melo, takze na to pozor). Z toho duvodu mas lepsi si predem vyjmenovat, ktery sloupce chces vybirat, a pokud by byly dva stejny, tak si je i sam aliasovat.

Ale pokud ti to hodne vadi si to vypisovat, tak jeste muzes udelat toto:

$newDescPost = $this->content->table('news_desc')->where('news_id', $postId)-fetch();
...
$created = $newDescPost->news->created;

PS: radsi bych si zaved nejakej model (napr neco jako $this->newsModel->getNewsRecord($postId)), kde si pripravis, co potrebujes, nez si takhle vytvarel selectiony v presenterech, dela to pak kod hodne neprehlednej..