Я пытаюсь получить некоторые данные через две модельные отношения с 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' ) ) ));
МНОГО проще, легче читать и вуаля – вы получаете нужные вам данные, не требуя использования «рекурсивного» страха.