JOIN 2 tabuliek na tabulku s dvoma stlpcami FK

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

Dobry den.

Moja databaza ma 3 tabulky.

produkt(produkt_id, nazov, popis, cena …); kategoria(kategoria_id, nazov) a tretiu tabulku produkt_kategoria (produkt_id, kategoria_id) ktora obsahuje len foreign keys na predchadzajuce dve tabulky.

V modely by som rad vytvoril metodu nieco ako fetchAllByKategoriaId($id), ktora by vracala vsetky produkty zoradene napr. podla ceny produktu. V klasickom SQL by to vyzeralo asi takto:

`SELECT produkt.nazov, produkt.popis, produkt.cena FROM produkt_kategoria
JOIN produkt ON produkt.produkt_id = produkt_kategoria.produkt_id
JOIN kategoria ON kategoria.kategoria_id = produkt_kategoria.kategoria_id
ORDER BY produkt.cena`

Moja otazka znie, ako taketo nieco docielit v nette?

Dakujem

Taps
Člen | 169
+
0
-

Docílíš toho úplně stejně.Do šablony pak jen pošleš pole s daty

kocourPB
Člen | 47
+
0
-

ok diky. vyreseno

metoda v modelu:

public function fetchAllByKategoriaId($id) {
	return $this->connection->query('
	    SELECT produkt.nazov, produkt.popis, produkt.cena FROM produkt_kategoria
	    JOIN produkt ON produkt.produkt_id = produkt_kategoria.produkt_id
	    JOIN kategoria ON kategoria.kategoria_id = produkt_kategoria.kategoria_id
	    WHERE kategoria.kategoria_id = ?
	    ', $id);
}

v presenteru:

$this->template->produkty = $this->produktRepository->fetchAllByKategoriaId(2);

Editoval kocourPB (1. 7. 2014 16:02)

David Matějka
Moderator | 6445
+
0
-

NDBT pristup:

$database->table('produkt')->where(':produkt_kategoria.kategoria_id', $id);

viz doc

kocourPB
Člen | 47
+
0
-

diky matej, presne tento styl zapisu som mal na mysli :)

Editoval kocourPB (1. 7. 2014 18:24)