1

假设我有 3 个模型。

  1. 用户(系统的用户)
  2. 申请人(有关每个用户的更多详细信息,例如地址、电话、兴趣位置等)
  3. 职位(在申请表中,我只将感兴趣的职位存储为 position_id,这是职位描述的位置)

这是我的模型 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 中要做什么才能得到这种结果。

谢谢大家。

4

1 回答 1

3

我看到两个选项:使用查找的递归属性来包含模型的关联: 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 添加到您的 find('all') 中,第二个解决方案有点冗长,但性能要好得多。

于 2013-04-24T12:33:49.050 回答