Извлечение данных через две модельные соотношения

Я пытаюсь получить некоторые данные через две модельные отношения с CakePHP. Модели и их ассоциации заключаются в следующем:

User hasOne Profile HABTM Skill 

Я бы хотел, чтобы навыки пользователя были возвращены, когда я выполняю операцию find() в модели User, и сейчас она не возвращается. Вот мой запрос на поиск, который выполняется против модели User :

 $this->paginate = array( 'conditions' => array( 'OR' => array( 'Profile.firstname LIKE' => "%$q%", 'Profile.lastname LIKE' => "%$q%" ) ) ); 

Он возвращает данные пользователя и данные профиля, но не данные о навыках. Я попробовал установку recursive на 2 или 3 , но это тоже не помогает. Единственный способ получить данные о навыках – это запустить программу find() для модели Profile , но я не могу этого сделать. Для уточнения здесь приведены соответствующие модели и их отношения:

 // app/Model/User.php class User extends AppModel { public $hasOne = 'Profile'; } // app/Model/Profile.php class Profile extends AppModel { public $belongsTo = 'User'; public $hasAndBelongsToMany = 'Skill'; // app/Model/Skill.php class Skill extends AppModel { public $hasAndBelongsToMany = 'Profile'; 

Может ли кто-нибудь помочь мне получить навыки пользователей при получении пользовательских данных? Благодарю.

Используйте CakePHP Containable Behavior . Ваша находка будет выглядеть примерно так:

 $this->User->find('all',array( 'conditions' => array( 'OR' => array( 'Profile.firstname LIKE' => "%$q%", 'Profile.lastname LIKE' => "%$q%" ) ), 'contain' => array( 'Profile' => array( 'Skill' ) ) )); 

МНОГО проще, легче читать и вуаля – вы получаете нужные вам данные, не требуя использования «рекурсивного» страха.