cakePHP model associations (retrieving data deeper

2019-06-06 01:42发布

I tried to find this everywhere but I cant. Here is my problem:

Lets say I have models associated like this:

  1. Student (has many Memberships)
  2. Membership (belongs to Student and TeacherCourse)
  3. TeacherCourse (belongs to Teacher and Course)
  4. Teacher (has many TeacherCourses)
  5. Course (has many TeacherCourses)

When I use membershipsController to send all membership to the view, I get only for example $membership['Membership']['id'] or $membership['TeacherCourse']['id'] BUT NOT $membership['TeacherCourse']['Teacher']['id']...

Which means I get info on Memberships and TeacherCourse because they are directly associated. My question is how can I also get info about Teachers or Courses directly?

2条回答
Emotional °昔
2楼-- · 2019-06-06 02:23

You could increase the model's recursion level to obtain deeper associations (set $this->Membership->recursive to 2 or 3), but in general it's better to use the Containable behavior so you can choose which associations you want to retrieve. For example this would return memberships with associated TeacherCourse and Teacher models:

$membership = $this->Membership->find('all', array(
    'contain'=>array(
        'TeacherCourse'=>array(
            'Teacher'=>array()
        ),
    ));

See also the full documentation of the Containable behavior at http://book.cakephp.org/2.0/en/core-libraries/behaviors/containable.html

查看更多
beautiful°
3楼-- · 2019-06-06 02:45

Scratching my head for a few minutes on this one when I realised you need to add the following to the Model first:

public $actsAs = array('Containable');

Just adding the contain array in the controller may not return the variables you're looking for in the view without the above.

查看更多
登录 后发表回答