Cakephp中的多对多关系

Cakephp中的多对多关系,cakephp,cakephp-2.0,Cakephp,Cakephp 2.0,我已经有了徽章、用户和徽章用户表。 我想在badge controller中构建一个list(),列出会话用户拥有的所有徽章。到目前为止,我得到了这个,我不知道如何继续。它必须与分页器组件一起工作 public function list() { $this->Badge->recursive = 0; $this->paginate['conditions'] = array('user_id' => $this->Auth->

我已经有了徽章、用户和徽章用户表。 我想在badge controller中构建一个list(),列出会话用户拥有的所有徽章。到目前为止,我得到了这个,我不知道如何继续。它必须与分页器组件一起工作

public function list() {
    $this->Badge->recursive = 0;        
    $this->paginate['conditions'] = array('user_id' => $this->Auth->user('id'));            
    $this->Paginator->settings = $this->paginate;           
    $this->set('badges', $this->paginate());
}

用户id字段仅在badge_users表中可用,而在badges表中不可用,因此您应该在badge_users控制器中生成list(),并在paginate设置中为badges模型定义contain参数

//in badges_users controller
public function list() {
    $this->BadgesUsers->recursive = 2;      
    $this->paginate['conditions'] = array('user_id' => $this->Auth->user('id'));    

//contain parameter
$this->paginate['contain'] = array('Badges');

    $this->Paginator->settings = $this->paginate;           
    $this->set('badges', $this->Paginator->paginate('BadgesUsers));
}

这真是太棒了,我只是烤了獾,一切都像魔术一样。我不知道我们可以有这样的控制器,官方文档从未声明过,我想知道为什么。实际上,表关系是CakePHP使用ORM的基本概念。您应该避免使用bake,以完全理解这个概念,并手动编写代码。祝你好运:)