Dotaz na cizí klíč se na localhostu přeloží správně, na produkci (WEDOS) ne
- Martin
- Člen | 171
Ahoj.
Narazil jsem na problém, se kterým si nevím vůbec rady. Mám stejnou strukturu databáze na vývojovém počítači (WAMP s MySQL) i na produkci (WEDOS s MariaDB), stejně definované cizí klíče.
Dotaz v NDB
$hlasy = $this->database->table('hlas')->where('odpoved_id.hlasovani_id', $hlasovaniId);
kde $hlasovaniId = 1, se na localhostu správně přeloží na:
SELECT `hlas`.`id`, `hlas`.`user_id`, `hlas`.`odpoved_id`
FROM `hlas`
LEFT JOIN `odpoved` `odpoved_id` ON `hlas`.`odpoved_id` = `odpoved_id`.`id`
WHERE (`odpoved_id`.`hlasovani_id` = '1')
zatímco na produkci na:
SELECT *
FROM `hlas`
WHERE (`odpoved_id`.`hlasovani_id` = '1')
což vede k chybě:
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'odpoved_id.hlasovani_id' in 'where clause'
Tabulky jsou v obou případech v InnoDB. Tušíte někdo, v čem může být rozdíl? V jiných případech se tam reference vyhodnocují správně.
Editoval Martin (1. 5. 2020 11:03)
- Martin
- Člen | 171
Děkuji za odpověď. Moc mi ale nepomůže, mám MySQL, protože je na
většině serverů a nerad bych si rozvrtal funkční vývojové prostředí
kvůli jednou experimentu. Na WEDOSU přešli na MariaDB a vše ostatní mi tam
funguje, v této oblasti by mělo být plně kompatibilní s MySQL. Cizí
klíče tam určitě Nette Database Explorer rozpozná dobře. Generuji si tam
mnoho formulářů přímo na produkci pomocí generátoru, který používá
vnitřní struktury Nette Database právě k identifikaci všech cizích
klíčů a možných vazebních tabulek a tam vše funguje bez problémů.
Ptal jsem se spíš, jestli se někdo s tímto problémem již nesetkal nebo
neví, čím by to mohlo být. Případně zda někdo neví, jak na produkci
trasovat vytváření SQL v Nette Database, aniž bych vepisoval trasování do
zdrojových kódů Nette.
Prozatím jsem to vyřešil použitím query s LEFT JOIN místo Nette Database
Exploreru, ale rád bych zjistil, v čem je problém.
Editoval Martin (3. 5. 2020 1:25)