Join tabulky k related tabulce spojením sloupců bez klíčů
- AZJOL
- Člen | 34
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)
- oldrich.valek
- Člen | 21
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á.
- oldrich.valek
- Člen | 21
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 | 1196
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