В версиях 2.x ответ на приведенный выше синтаксис $this->Model1->Model2
не будет работать. Вызов функций из других моделей во многих случаях является задачей контроллера, а не модели. Учтите, что методы модели должны быть ограничены запросом и обновлением данных при сохранении целостности базы данных.
1-й метод: использование контроллера
Я проиллюстрирую это на примере моделей Firm
и User
, в то время как Firm
hasMany
пользователей. Этот метод рекомендуется, если вы планируете добавить дополнительные функциональные возможности контроллера, такие как установка флеш-сообщений или файлов cookie.
User
модель:
public function saveRegisteredUsers($user_data,$firm_id){ ... }
-
FirmsController
:
public function add(){
if($this->Firm->save($this->request->data)){
// set $this->Firm->id here
$this->loadModel('User');
$this->User->saveRegisteredUsers($this->request->data['User'],
$this->Firm->id);
// ...
}
}
2-й метод: с использованием модели
Для этого вам понадобятся правильные ассоциации моделей. Имена таблиц должны быть users
и firms
условно. Следуя терминологии приведенного выше примера, ваше отношение должно быть определено в модели Firm
следующим образом:
public $hasMany = array( 'User' => array(
'className' => 'User',
));
В модели User
необходимо правильно настроить связь belongsTo
:
public $belongsTo = array(
'Firm' => array(
'className' => 'Firm',
'foreignKey' => 'firm_id',
'dependent' => false
)
);
После этого вы можете вызывать $this->User->saveRegisteredUsers()
напрямую из любого из Firm
методов модели.