join bez cizyho klice v \Nette\Database

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

zdravim,

je mozny join dvou tabujek bez ciziho klice?

$selection = $this->getDb()->table('PoradenstviSekce');
		$selection->where(':PoradenstviSekceWeb.id_sekce = PoradenstviSekce.id_sekce');
		$result = $selection->fetchAll();

mi vrati:

SELECT `PoradenstviSekce`.*
FROM `PoradenstviSekce`
LEFT JOIN `PoradenstviSekceWeb` ON `PoradenstviSekce`.`id_sekce` = `PoradenstviSekceWeb`.`id_sekce`
WHERE (`PoradenstviSekceWeb`.`id_sekce` = `PoradenstviSekce`.`id_sekce`)

Ale pokud provedu ten stejny kod nad tabulkami bez cizych klicu konci to „No reference found for…“

Je toto mozne poresit bez iniciace cizych klicu?

dekuji

vvoody
Člen | 910
+
0
-

Ten where tam tak či tak nemá byť, NDBT si celý join aj s ON podmienkou píše sám.

Ak pracuješ s tabuľkami bez FK, prípadne s view kde FK myslím neexistujú, musíš použiť inú reflecion implementáciu. V configu pravdepodobne nemáš nastavenú žiadnu reflecion, alebo tam máš tú defaultnú DiscoveredReflecion. Ako zmeniť reflecion máš popísané na tejto stránke https://doc.nette.org/cs/database#…

DiscoveredReflecion určuje väzby podla FK. Nette ponúka ešte jednu reflecion: ConventionalReflection ktorá určuje väzby podla pravidiel pomenovávania stľpcov. (PK ⇒ id, FK ⇒ tablename_id). Ak pre tvoju databázovú štruktúru nebude vhodná ani ConventionalReflecion tak si budeš musieť vytvoriť vlastnú reflecion alebo písať query pomocou query funkcie https://doc.nette.org/cs/database#…