Chyba v dokumentácii NDBT?
- Čamo
- Člen | 798
Vitajte,
Ide o tent príklad s prepojením
tabuliek v db
Jedná sa o metódu ref(table, field). Je tam napísané, že zápis
book->autor->name == book->ref(autor)->name.
Metoda ref() príma ako parametre tabulku a stĺpec.
No a problematický zápis ktorý tam je
book->translator->name ==
book->ref(translator)->name
Podľa toho tam chýba tabuľka translator.
Dlho som si myslel, že je tam omylom miesto stĺpca translator_id stlpec
maintainer_id a smeruje do tabuľky autor.
Lenže ten zápis book->translator->name mi vychádza, že sa spája
s babuľkou translator ktorá tam nieje a začiatočníkou to mätie.
Zjavne tam chýba tabuľka translator, Alebo ak translator patrí do tabuľky
autor, tak by mal dotaz vyzerať podľa mňa
Book->ref(autor,translator)->name
Ako to teda je???
Ďakujem
Editoval Čamo (4. 8. 2014 11:22)
- Čamo
- Člen | 798
Ale ak translator_id = maintainer_id tak ako bude Nette podla zápisu
Book->tanslator->name vedieť, s ktorou tabuľkou sa má spojiť?
Book->autor->name sa ešte dá odvodiť, že sa spojí s table autor, ale
z čoho sa odvodí, že book->translator->name smeruje tiež na
autor?
Pre toto sa na to pýtam.
Editoval Čamo (4. 8. 2014 11:34)
- David Matějka
- Moderator | 6445
https://doc.nette.org/…ase/explorer#…
Logika vytváření „spojovacího klíče“ je dána implementací IReflection. Doporučujeme použití DiscoveredReflection, které analyzuje cizí klíče a umožňuje jednoduše pracovat se vztahy mezi tabulkami.
Editoval matej21 (4. 8. 2014 12:05)
- Čamo
- Člen | 798
Takže dotaz na information schema a nie podľa názvu?
Mám k tomu ešte dve otázky.
1.Ako sa prepįna medzi tým IReflection a DiscoveredReflection?
2.Nieje ten dotaz
$query = 'SELECT CONSTRAINT_NAME, COLUMN_NAME, REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME FROM information_schema.KEY_COLUMN_USAGE '
. 'WHERE TABLE_SCHEMA = DATABASE() AND REFERENCED_TABLE_NAME IS NOT NULL AND TABLE_NAME = ' . $this->connection->quote($table);
Platný iba pre mysql?
Editoval Čamo (4. 8. 2014 12:55)
- David Matějka
- Moderator | 6445
- z information schema se vytahnou cizi klice, v tom se pote hleda treba to, kam smeruje sloupecek translator_id
- IReflection je interface, DiscoveredReflection je konkretni implementace, pak je tu jeste ConventionalReflection. https://doc.nette.org/cs/configuring#…
- ano, ten dotaz je platny pouze pro mysql. A proto je ve tride MysqlDriver
Editoval matej21 (4. 8. 2014 12:59)
- Čamo
- Člen | 798
A keď sa napíše
book->ref(‚autor‘, ‚translator_id‘)->name
tak sa tiež spustí ten proces zisťovania, alebo sa to zrýchli? Alebo je
to jedno?
PS: A nemohol by niekto ten obrázok vymeniť?
https://docs.google.com/…M2M2Ymc/edit?…
- David Matějka
- Moderator | 6445
pri uvedeni book->ref('autor', 'translator_id')->name
to
nebude ty informace zjistovat v te reflection, takze se to teoreticky zrychli.
ale vzhledem k tomu, ze ty informace o FK nette\database cachuje, tak ten
rozdil bude minimalni..