CakePHP检索HABTM数据

时间:2014-02-08 22:15:45

标签: cakephp has-and-belongs-to-many

快速设置:User hasAndBelongsToMany Course

      courses_users
__________________________
id | user_id | course_id |
 1 |       1 |         1 |
 2 |       1 |         3 |
 3 |       2 |         5 |

我需要使用Courses

加载User的所有users.id = 1

我试过了:

$this->User->id = $this->Auth->user('id');
$courses = $this->User->Courses->find('all');

但上面的代码检索所有课程,而不是与用户的课程相关联

2 个答案:

答案 0 :(得分:1)

由于您的关系非常紧密,您需要执行以下操作:

$this->User->read(null, $id);
or
$this->User->find('first', array('conditions'=>array('id'=>1)));

它还应返回用户的课程。这取决于你的应用程序,但我会使用Containable行为来只检索课程,但实际上取决于你与用户模型的关系。

具有可包含的行为,您应该只加载类似的课程关系:

$this->User->find('first', 
   array(
      'conditions'=>array('id'=>1), 
      'contain'=>array('Courses')));

答案 1 :(得分:0)

 $course_ids = $this->CoursesUser->find('list', array('conditions'=>array('user_id'=>$this->Auth->user('id')), 'fields'=>'course_id'));

 $courses = $this->Course->find('all', array('conditions'=>array('id'=>$course_ids)));