无法在CakePHP中显示表关联

时间:2011-07-13 20:00:01

标签: php mysql cakephp join

目前我在CakePHP中有一个复杂的关联,我无法解决。

我有这些模特:

  • 列表(id,名称)
  • 推荐(身份证,姓名,电子邮件)
  • List_Users(join_table:id,referral_id,user_id)
  • 用户(身份证,姓名,电子邮件)。

关系是:

  • 列表< - HABTM - > Lists_Users< - HABTM - >用户
  • 推荐人属于列表
  • 列表有多个推介

*用户是注册用户,推介只是他们推荐给此列表的朋友。该系统包含许多不同的列表。

我要做的是在列表控制器中设置 showList 功能,以显示链接到此列表的所有用户和引荐。我一开始尝试使用它作为控制器,但没有成功:

function showList() {
    $this->List->recursive = 2;
    $users->List->User->find('all');
    $referrals->List->Referral->find('all');
    $this->set(compact('users','referral'));
    $this->set('listas', $this->paginate());
}

如何才能使此关联工作并显示所需的所有数据?

2 个答案:

答案 0 :(得分:0)

您的List_Users模型应为ListsUsers(复数列表和驼峰式案例,而不是下划线。)

答案 1 :(得分:0)

在打破了自己的脑袋后,似乎我找到了自己问题的答案!正确的功能是:

function showList($id = null) {
    $this->List->recursive = 0;
    if (!$id) {
        $this->Session->setFlash(__('Invalid', true));
        $this->redirect(array('action' => 'index'));
    }
    else {
    $this->set('list', $this->List->read(null, $id));
    $this->set('users', $this->List->User->find('all',
        array(
            'fields' => array('id','name', 'email'),
            'order' => 'name ASC'  
            )
        ));
    $this->set('referrals', $this->List->Referral->find('all',
        array(
            'fields' => array('id','name', 'email'),
            'order' => 'name ASC'  
            )
        ));
    }
    $this->set('lists', $this->paginate());
}