$this->request->data['teacher']['user_id'] = $this->User->id;
powinno być
$this->request->data['Teacher']['user_id'] = $this->User->id;
.
Duże „T”. Nazwy modeli to zawsze CamelCased.
To powiedziawszy, nie ma potrzeby wykonywania 2 rzutów obronnych. Możesz po prostu użyć
$this->User->saveAll($this->request->data);
.
Zapisuje zarówno rekord użytkownika, jak i rekord nauczyciela, dodając odpowiednią wartość klucza obcego dla rekordu nauczyciela (zakładając, że ustawiono prawidłowe powiązanie między modelem użytkownika i nauczyciela).