Database\Context práce s více databázovými tabulkami
- James
- Člen | 54
Zdravím,
v jednom svém projektu bych potřeboval v modelu, ve kterém vytvářím dotazy na MySQL databázi komunikovat s více tabulkami najednou. Například udělat spojení dvou tabulek a výsledek setřídit podle jednoho ze sloupců druhé tabulky.
Hledal jsem nějaké ukázky řešení tady na fóru, ale bohužel jsem nic vhodného nenašel (kód v uvedené funkci je nefunkční, pouze pro představu)
class CompanyManager extends Nette\Object
{
/** @var Nette\Database\Context */
private $db;
public function __construct(Nette\Database\Context $db)
{
$this->db = $db;
}
public function getAllActors()
{
return $this->db->table('actors')
->select('actors.*, actors_role.*')
->order('actors_role.name');
}
Děkuji za rady
- David Matějka
- Moderator | 6445
radit, filtrovat apod. muzes – v tomto konkretnim pripade musis pouzit tzv. backjoin syntaxi (jelikoz se jedna o „has many“ smer)
return $this->db->table('actors')
->order(':actors_role.name');
vybirani z vice tabulek najednou je proti filozofii NDBT:
https://doc.nette.org/…ase/explorer
Hlavní myšlenkou je načítání dat pouze z jedné tabulky a tak, aby se tyto dotazy pokládaly jen jednou
Pokud bys to presto chtel pouzit, nesmis to brat od tabulky, ktera ma „has many“ relace (NDBT to totiz seskupi dle PK hlavni tabulky).
Mohlo by jit tedy tohle
return $this->db->table(actors_role')
->select('actors.*, actors_role.*')
->order('actors_role.name');
Editoval matej21 (23. 9. 2014 18:39)