Join tabulky k related tabulce spojením sloupců bez klíčů

AZJOL
Člen | 34
+
0
-

Zdravím,
mám pěkně udělanou related tabulku, kde u zprávy zobrazuji telefonní čísla příjemců. Zároveň bych ale rád zobrazil na základě telefonních čísel Jména příjemců.

Zde je definice related tabulky:

{foreach $soutd->related("SOUTD.OUT_ID") as $prijemci}
    <tr>
    	<td colspan='4'>{$prijemci->TELEFON}</td>
	</tr>
{/foreach}

Chtěl jsem použít funkci ref(), jenže to je možnost jen v případě, že se jedná o primární a cizí klíč nad sloupci. TELEFON v tabulce SOUTD ale není nijak propojený se sloupcem TELEFON v tabulce kontaktů.
Takto jsem si to představoval:

		<td colspan='4'>{$prijemci->TELEFON->ref('CONTACT','TELEFON')->NAME}</td>

Je zde nějaká další možnost, jak toto udělat? Předem děkuji všem za odpovědi!!

Editoval AZJOL (6. 6. 2017 17:32)

trejjam
Backer | 65
+
0
-

Zdravím,

můžeš nám ukázat definici tabulky a cizích klíčů? Takto se jen těžko hádá jak Tvá databáze vypadá.

oldrich.valek
Člen | 21
+
0
-

Pokud nemáš cizí klíč, který by tabulky propojoval, tak ti myslím nezbude nic jiného, než si napsat vlastní query. Potom však nebudeš moci používat věci jako related a ref, protože ty jsou dostupné pouze nad objektem ActiveRow, kdežto volání query vrací jen ResultSet. V tom vlastním SQL dotazu si tedy musíš najoinovat všechny potřebné tabulky a vyselektovat všechna data rovnou.

V tomto je Nette\Database\Table poněkud omezující, avšak problém to není, pokud je databáze vhodně navržená.

AZJOL
Člen | 34
+
0
-

Vzhledem k tomu, že jsem databázi nenavrhoval, nemám právo do ní moc zasahovat. Udělám to tedy nakonec přes view, ale díky za objasnění ;) ..

oldrich.valek
Člen | 21
+
+1
-

Možná že by to ještě šlo obejít napsáním vlastních „conventions“ implementováním interfacu IConventions. Název tvé třídy by sis předal do reflection v configu databáze. Btw nejsem si jist, že ti nad view bude fungovat Selection. Pokud by si teď používal reflection: discovered, tak bych řekl, že spíš nebude.

Pavel Kravčík
Člen | 1180
+
+1
-

Ano, vlastní „convence“ je asi jediné řešení.

Ref funguje v případě, že se odvoláváš na ID v druhé tabulce. Například:

books (id, author_id)
authors (id, name)

$bookRep->ref('authors', 'author_id')->name; //ta vazba je books.author_id = authors.id
AZJOL
Člen | 34
+
0
-

Díky za rady, views mi fungují a je to asi nejrychlejší a nejjednoduší řešení, teda aspoň pro mě :D