По моему мнению, правильный способ сделать это - добавить функцию к вашей текущей модели, которая создает экземпляр другой модели и возвращает необходимые данные.
Вот пример, который возвращает данные из модели проекта в модели с именем Example и вызывает данные в контроллере примера:
Использование модели проекта внутри модели примера:
<?php
/* Example Model */
App::uses('Project', 'Model');
class Example extends AppModel {
public function allProjects() {
$projectModel = new Project();
$projects = $projectModel->find('all');
return $projects;
}
}
Возврат этих данных в Пример контроллера
// once inside your correct view function just do:
$projects = $this->Example->allProjects();
$this->set('projects', $projects);
В примере Пример
<?php
// Now assuming you're in the .ctp template associated with
// your view function which used: $projects = $this->Example->allProjects();
// you should be able to access the var: $projects
// For example:
print_r($projects['Project']);
Почемуэто "лучшая" практика, чем загрузка обеих моделей в ваш контроллер?Итак, модель Project наследуется моделью Example, поэтому данные Project теперь становятся частью области действия модели Example.(Это означает, что со стороны базы данных две таблицы объединяются с использованием предложений SQL JOIN
).
Или, как говорится в руководстве:
Одна из самых мощныхОсобенностью CakePHP является возможность связывать реляционное отображение, предоставляемое моделью.В CakePHP связи между моделями обрабатываются через ассоциации.Определение отношений между различными объектами в вашем приложении должно быть естественным процессом.Например: в базе данных рецептов рецепт может иметь много рецензий, рецензии имеют одного автора, а у авторов может быть много рецептов.Определение способа работы этих отношений позволяет вам получить доступ к вашим данным интуитивно и эффективно.( источник )