CakePHP 2:模型关联中的多级联接

时间:2013-04-23 17:30:18

标签: cakephp cakephp-2.0

假设我有3个型号。

  1. 用户(系统用户)
  2. 申请人(有关每个用户的详细信息,如地址,电话, interest_position等)
  3. 职位(在表格申请人中我只将感兴趣的职位存储为position_id,这是 位置的描述)
  4. 这是我的模型php文件。

    class User extends AppModel { 
      public $hasOne = 'Applicant'; 
    }
    
    
    class Applicant extends AppModel { 
      public $belongsTo = array('User', 'Position'); 
    }
    
    
    class Position extends AppModel { 
      public $hasMany = 'Applicant';
    }
    

    这是我的UsersController.php

    class UsersController extedns AppController {
      public function index() {
        $this->User->find('all');
      {
    }
    

    当执行/ users / index时,我在SQL转储上获得了SQL语句,如下所示。

    select *
    from users
      left outer join applicants
        on users.id = applicants.user_id
    

    但这就是我的需要。

    select *
    from users
      left outer join applicants
        on users.id = applicants.user_id
      left outer join positions
        on positions.id = applicants.position_id
    

    那么在CakePHP中可以做些什么来获得这种结果。

    谢谢大家。

1 个答案:

答案 0 :(得分:3)

我看到两个选择: 使用find的递归属性来包含模型的关联关联: http://book.cakephp.org/2.0/fr/models/model-attributes.html#recursive

使用可包含的行为执行相同的操作,但对请求中的联接有更多控制权:http://book.cakephp.org/2.0/fr/core-libraries/behaviors/containable.html

第一个解决方案非常简单,只需添加'recursive'=> 2,你的发现('全'),第二个解决方案有点长,但有更好的表现。