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?