通过两个模型关系检索数据

时间:2013-04-06 14:06:56

标签: php cakephp model has-and-belongs-to-many

我正在尝试通过与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设置为23,但这也无济于事。我可以获得技能数据的唯一方法是,如果我针对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';

在检索用户数据时,有人可以帮助我获得用户技能吗?感谢。

1 个答案:

答案 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'
        )
    )
));

更简单,更易于阅读和瞧 - 您可以获得所需的数据,而无需使用可怕的“递归”。