0

我试图通过与 CakePHP 的两个模型关系来检索一些数据。模型及其关联如下:

User hasOne Profile HABTM Skill

我希望find()在对 User 模型进行操作时返回用户的技能,现在它没有返回。这是我对User模型执行的 find 调用:

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

它返回用户数据和个人资料数据,但不返回任何技能数据。我尝试设置recursive2or 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';

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

4

1 回答 1

1

使用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'
        )
    )
));

更简单,更容易阅读,瞧——你得到你想要的数据,而不需要使用可怕的“递归”。

于 2013-04-06T23:55:03.427 回答