join bez cizyho klice v \Nette\Database
- JanJan
- Člen | 1
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
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#…