$this->request->data['teacher']['user_id'] = $this->User->id;
by mělo být
$this->request->data['Teacher']['user_id'] = $this->User->id;
.
Velké "T". Názvy modelů jsou vždy CamelCased.
To znamená, že nejsou potřeba 2 uložení. Stačí použít
$this->User->saveAll($this->request->data);
.
Uloží jak záznam uživatele, tak záznam učitele s přidáním správné hodnoty cizího klíče pro záznam učitele (za předpokladu, že máte nastaveno správné přidružení mezi modelem uživatele a učitele).