CakePHP复杂关系

时间:2014-04-23 16:30:24

标签: cakephp

我有以下表格:

teams(id, name)
team_users(id, team_id, user_id) 
users (id, username)
projects (id, project_name, team_id)

一个团队拥有许多用户,用户拥有多个团队,一个项目属于一个团队。

如果我拨打$ this-> User-> find();它返回用户及其所属团队的信息。

我想做的是,我想了解他所关联的项目。含义:

John Doe是X队的成员,Y.X有2个项目,Y有3个项目。我想将项目数量返回为5,某种虚拟字段。有可能吗?

2 个答案:

答案 0 :(得分:1)

如果您已正确设置模型关系,则只需查询此查询:

$this->User->virtualFields = array('total_projects' => 'COUNT(*)');
$user_projects = $this->User->find('all',array('fields' => array('total_projects', '*')));

//$user_projects["User"]["total_projects"] -> this will result to 5 base on your question above or you can debug this by: debug($user_projects) so you can see the content of the array

答案 1 :(得分:0)

在关系中使用“counterCache”选项。

http://book.cakephp.org/2.0/en/models/associations-linking-models-together.html#belongsto

class Project extends AppModel {
    public $belongsTo = array(
        'Team' => array(
            'className' => 'Team',
            'foreignKey' => 'team_id',
            'counterCache' => true
        )
    );
}

您需要在project_count表中添加一个新字段teams,CakePHP将完成其余的工作。