Propojení SELECT s WHERE v jiné tabulce
- genesiscz
- Člen | 21
Zdravím, mám takový zajímavý problém. Rozhodl jsem se naplno začít
využívat Foreign Keys.
Avšak mám tu jeden zádrhel. Vezmeme si příklad, že chci vybrat data
závodu, ve kterém jezdil určitý řidič.
Mám tedy tabulky „races“ a „race_drivers“ (tam mám sloupec race_id
jako foreign key k id v tabulce races).
Zkoušel jsem něco podobného, avšak mám pocit, že je to trochu chybné
$races = $this->db->table("races")
->where("race_drivers.driver_id = ?", $driver_id)
->fetch();
Nacož dostanu chybu
No reference found for $races->race_drivers.
Když kouknu na položené dotazy, vidím že se hledají cizí klíče z tabulky „races“. Nemělo by to spíše hledat z tabulky race_drivers? Jak jinak můžu elegantně takto propojit tabulky? Takto to funguje, ale příjde mi to prasácky:
$races = $this->db->table("race_drivers")
->select("race_drivers.*, races.*")
->where("race_drivers.driver_id", $id)
;
Editoval genesiscz (12. 7. 2014 1:46)
- David Matějka
- Moderator | 6445
pokud chces filtrovat dle „has many“ smeru, musis tam pridat dvojtecku, viz https://doc.nette.org/…ase/explorer#…
$races = $this->db->table("races")
->where(":race_drivers.driver_id = ?", $driver_id)
bez dvojtecky by to bylo v opacnem smeru, pokud bys treba chtel vybrat ridice dle treba datumu zavodu
$drivers = $this->db->table("race_drivers")
->where("race.date = ?", new \DateTime);