Práce s cizími klíči v Nette\Database\Context

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
thirdknown
Člen | 26
+
0
-

Ahojte,

mám neomezené množství uživatelů. Každý má roli (uživatel, správce, administrátor).

Mám 2 tabulky:

  1. users. Sloupce: id, login, id_role, password
  2. roles. Sloupce: id, role_name

Při zakládání tabulky users jsem udělal mj.:

``KEY `id_role` (`id_role`),
``CONSTRAINT `users_ibfk_3` FOREIGN KEY (`id_role`) REFERENCES `roles` (`id`)

aby id_roleusers odkazovalo na idroles.

V admineru po naplňění daty se můžu přes users proklikat do roles (kliknu na číslo v id_role a ono mě to hodí do tabulky roles).

Jenže nevím, jak s tím v nette mám pracovat.
Pro to, abych získal role_name jsem zkoušel:

$result = $this->database->table('users')->where('login', $login'])->fetch();
$result->password // Normálně dostanu hash
$result->id_role // Normálně dostanu id
$result->id_role->role_name // Chci název role, nejde to
$result->role_name // Chci název role, nejde to
$result->references('roles') // Chci název role, nejde to

Nevíte prosím, jak na to?

Jediné, co mě funguje je toto:
(ztrácím ale výhodu cizích klíčů)

$id_role = $this->database->table('users')->where('login', $login)->fetch()->id_role;
$role_name = $this->database->table('roles')->where('id', $id_role)->fetch()->role_name;

Všechny tabulky mám InnoDB.

Díky

Editoval thirdknown (29. 7. 2014 13:15)

Hurass
Člen | 114
+
0
-

Přejmenuj v tabulce users sloupeček id_role na roles_id a pak zkus dotaz takto:

$result = $this->database->table('users')->select('users.*, roles.role_name AS role')->where('login', $login)->fetch();

Název role pak máš v:

$result->role

Editoval Hurass (29. 7. 2014 13:24)

hrach
Člen | 1838
+
+3
-

Co píše hurass je špatně.

$result->role->role_name;

Jinak si přečti dokumentaci,toto tam přesně je všechno napsané a vysvetlene, i proč je hurassovo řešení špatně.