我正在尝试通过与CakePHP的两个模型关系检索一些数据。模型及其关联如下:
User hasOne Profile HABTM Skill
我希望在User模型上执行find()
操作时返回用户的技能,此时它不会被返回。这是我针对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';
在检索用户数据时,有人可以帮助我获得用户技能吗?感谢。
答案 0 :(得分:1)
使用CakePHP's Containable Behavior。您的发现将看起来像这样:
$this->User->find('all',array(
'conditions' => array(
'OR' => array(
'Profile.firstname LIKE' => "%$q%",
'Profile.lastname LIKE' => "%$q%"
)
),
'contain' => array(
'Profile' => array(
'Skill'
)
)
));
更简单,更易于阅读和瞧 - 您可以获得所需的数据,而无需使用可怕的“递归”。