Nette\Database a LEFT JOIN

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
VaKvas
Začátečník | 111
+
0
-

Zdravim a prosim o pomoc,

pridelavam nejake filtry pro vyber dat u gridu a v ramci zjednoduseni potrebuji prepsat:

$database->query('SELECT c.*, k.name as client_name, b.name as branch_name
		   FROM contracts c
		   LEFT JOIN clients k ON (c.clientId=k.id)
		   LEFT JOIN branches b ON (c.branchId=b.id)
		   ORDER BY ' . $orderby . ' LIMIT ?, ?', $offset, $limit);

na

$database->table('contracts')-> .....

Rad bych pak pridaval nakonec jen ->WHERE() podle filtru, coz na query() nejde…

Hledal jsem ruzne rady zde na foru, ale bohuzel jsem to z toho nedal dohromady
Moc diky za pomoc !

Editoval VaKvas (19. 7. 2011 10:02)

Ot@s
Backer | 476
+
0
-

Asi to zatím nepůjde, protože podpora float zápisu v Nette/Database ještě není komplet. Jediné řešení je použít NotORM. Já osobně to obcházím tím, že si tyto dotazy ukládám do pohledů a nad tím pracuju bez JOINování. Nelíbí se mi to, ale jiné řešení jsem taky nenašel.

VaKvas
Začátečník | 111
+
0
-

Tak precejen to jde:

$database->table('contracts')
	 ->select('contracts.*, clients.name as client_name, branches.name as branch_name');

je presne ono..

Jedina nevyhoda snad je, ze nazev sloupce s id propojene tabulky musi byt presne ‚tabulka_id‘

Editoval VaKvas (19. 7. 2011 13:38)

Jan Voráček
Člen | 90
+
0
-

VaKvas napsal(a):

Jedina nevyhoda snad je, ze nazev sloupce s id propojene tabulky musi byt presne ‚tabulka_id‘

Ale nemusí :) Můžeš si napsat vlastní DatabaseReflection, kterou předáš Nette\Database\Connection. Popřípadě můžeš zkusit implementovat něco jako NotORM_Structure_DiscoveryNotORM.

VaKvas
Začátečník | 111
+
0
-

Lze nejak zadat, aby delal LEFT misto INNER JOINY?