为了解释我遇到的问题,我将使用一个示例。假设我正在构建一个系统,学生可以在其中注册课后课程,但管理员必须批准注册才能使其有效。所以我有这些模型:
- 日历(属于“老师”,hasAndBelongsToMany“学生”)
- 学生(hasAndBelongsToMany“日历”)
- 老师(有很多“日历”)
现在假设我想查看所有针对九年级学生的未批准注册的列表。我希望该列表包含日历日期、学生姓名和教师姓名。我会做这样的事情:
$this->request->data = $this->Student->CalendarsStudent->find('all', array(
'conditions' => array(
'CalendarsStudent.is_approved' => null,
'Student.grade' => 9
)
));
上面代码的问题是返回的数组缺少老师的名字:
Array
(
[0] => Array
(
[CalendarsStudent] => Array
(
[id] => 1274
[calendar_id] => 200
[student_id] => 872
[is_approved] =>
)
[Calendar] => Array
(
[id] => 200
[date] => 2012-12-17
[teacher_id] => 1
[total_slots] => 15
)
[Student] => Array
(
[id] => 872
[teacher_id] => 1
[first_name] => Billy
[last_name] => Smith
[grade] => 9
)
)
)
如果我添加'recursive' => 2
参数find
,我会得到太多信息。$this->request->data[0]['Calendar']
will have [Teacher]
,这是我想要的,但它也会有[Student]
,这是我不想要的。此外,$this->request->data[0]['Student']
将有我不想要的子数组。似乎Containable
可以解决这个问题,但我也无法让它工作。
有任何想法吗?