Proč funguje JOIN pouze z tabulky s definovaným cizím klíčem?
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.

- sKopheK
- Člen | 207
Mám tabulky user a user_service a chci vytáhnout
řádek z tabulky user, pokud v tabulce user_service
existuje záznam s odpovídajícími hodnotami odkazující na tabulku
user.
Když jsem na to šel přes tabulku user (user →
user_service) vyhodilo to výjimku
MissingReferenceException bez použití dvojtečky, s dvojtečkou
pak že neexistuje rodičovská tabulka nebo tak něco (což je logické).
$conditions = array(
'user_service.service' => $service,
'user_service.service_user_id' => $service_user_id,
);
return $this->database->table('user')->where($conditions)->fetch();
Při opačném joinování (user_service → user)
proběhne vše v pořádku.
$conditions = array(
'service' => $service,
'service_user_id' => $service_user_id,
);
return $this->database->table(self::TABLE_SERVICE)->select('user.*')->where($conditions)->fetch();
Mohl by mi to někdo prosím vysvětlit? Proč nemůže fungovat i první případ, v SQL je přece jedno, jak se JOINuje…

- David Matějka
- Moderator | 6445
v tom prvnim by jsi mel pouzit tu dvojtecku,
//nette 2.0:
$conditions = array(
'user_service:service' => $service,
'user_service:service_user_id' => $service_user_id,
);
//nette 2.1
$conditions = array(
':user_service.service' => $service,
':user_service.service_user_id' => $service_user_id,
);
jakou chybu ti to hlasi?