Hodnota podle vedlejšího klíče

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

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
+
0
-

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
+
0
-

@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
+
0
-

@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. :-)