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
+
0
-

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 (useruser_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_serviceuser) 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
+
0
-

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?

sKopheK
Člen | 207
+
0
-

Zapomněl jsem uvést, že používám Nette 2.1dev.
…a dvojtečka začala fungovat. Zkoušel jsem ji i předtím, ale asi jsem udělal chybu někde jinde. Díky