CakePHP:如何根据二级关联条件查询结果?

CakePHP:如何根据二级关联条件查询结果?,php,cakephp,Php,Cakephp,假设我们有3个模型,用户、房屋和个人资料,它们之间有以下关联: 用户有很多房子(属于用户的房子) 用户有一个配置文件(配置文件属于用户) 我想查询houses(在HousesController类中),其关联的概要文件满足给定的概要文件条件。考虑下面的例子: 假设性别是Profile模型的属性,我想检索所有的房子,其所有者是男性 我找到了一个问题,这个问题和我所寻求的足够接近。在我的例子中,模型之间的关系更复杂(House belongsTo用户只有一个配置文件),我无法让它工作。我尝试过这

假设我们有3个模型,用户、房屋和个人资料,它们之间有以下关联:

  • 用户有很多房子(属于用户的房子)
  • 用户有一个配置文件(配置文件属于用户)
我想查询houses(在HousesController类中),其关联的概要文件满足给定的概要文件条件。考虑下面的例子:

假设性别是Profile模型的属性,我想检索所有的房子,其所有者是男性

我找到了一个问题,这个问题和我所寻求的足够接近。在我的例子中,模型之间的关系更复杂(House belongsTo用户只有一个配置文件),我无法让它工作。我尝试过这样的事情,但没有任何运气:

$this->House->find('all', array(
                  'contain' => array(
                      'User' => array(
                          'Profile' => array(
                              'conditions' => array(
                                  'Profile.gender' => 'male'
))))));
上述调用返回所有房屋,如果性别为男性,则在结果中包含相应用户的个人资料。否则,用户的配置文件将保持为空。我真正需要的是只归还主人是男性的房子


实际上,我已经使用
Model::find()
函数的'joins'选项实现了它,但是我想知道,如果不使用'joins',这是否可能,如果是,如何实现

我建议使用bindModel方法显式声明关系

您可以通过房屋控制器执行此操作,如下所示:

/**
 * Bind the models together using explicit conditions
 */
$this->House->bindModel(array(
  'belongsTo' => array(
    'User' => array(
      'foreignKey' => false,
      'conditions' => array('House.user_id = User.id')
    ),
    'Profile' => array(
      'foreignKey' => false,
      'conditions' => array('Profile.user_id = User.id')
    )
  )
));

/**
 * Standard find, specifying 'Profile.gender' => 'male'
 */
$houses = $this->House->find('all', array(
  'conditions' => array(
    'Profile.gender' => 'male'
  )
));

谢谢你的回答。这正是我要找的!我想补充一点,如果要使用paginate而不是find,则必须将
Model::bindModel()
函数的第二个参数设置为
false