Database\Context práce s více databázovými tabulkami

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

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

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)