Hodnota podle vedlejšího klíče
- dabelskyzjev
- Člen | 2
Ahoj,
jsem v Nette začátečník a potřeboval bych poradit se skládáním dotazu
v Nette/Database.
Mám 2 tabulky user(ID,username) a ticket(ID,zadavatel,resitel).
Jak pomocí
<?php
$db->table('ticket')->where(array('ID' => 1)) ;
?>
dostat záznam, třeba tabulku,
ID | zadavatel | resitel
ale místo ID dostávat jejich username.
Díky moc.
- vvoody
- Člen | 910
Chceš to asi použiť takto:
$ticket = $db->table('ticket')->where(array('ID' => 1))->fetch();
// alebo uspornejsie pomocou get, ktory vyhlada na zaklade PK a naviac fetchne result za nas
$ticket = $db->table('ticket')->get(1);
$ticket->zadavatel->username;
$ticket->resitel->username;
Toto ale nebude fungovať, lebo $ticket->zadavatel je stĺpec tabuľky a vráti len jeho hodnotu. My chceme aby vrátil celý riadok (objekt typu ActiveRow) z tabuľky user. Ak premenuješ stĺpce zadávateľ a riesitel na zadavatel_id a riesitel_id, tak to už pôjde.
- Petr Hudík
- Člen | 49
@dabelskyzjev: z Tvého příspěvku to není na
první pohled patrné, ale předpokládám, že zadavatel i řešitel jsou oba
v tabulce user
.
V takovém případě bude nutné využít cizí klíče a uložiště InnoDb viz Dokumentace. Poté by mělo fungovat:
$ticket = $db->table('ticket')->get(1);
$ticket->ref('user', 'zadavatel')->username;
$ticket->ref('user', 'resitel')->username;
- dabelskyzjev
- Člen | 2
@vvody: Právě že přejmenovávat sloupce mi přijde takové těžkopádné řešení, ale díky tvému příspěvku tak nějak chápu, jak to asi funguje :-)
@Petr Hudík: Díky moc, tohle je přesně to, co jsem potřeboval. :-)