제가 겪고있는 문제를 설명하기 위해 예제를 사용하겠습니다. 방과 후 수업에 등록 할 수있는 시스템을 구축 중이라고 가정 해 봅시다. 그러나 관리자는 가입 절차가 유효하도록 승인해야합니다. 그래서이 모델이 있습니다CakePHP HABTM 재귀적인 문제
- 일정 (속한 "교사", hasAndBelongsToMany의 "학생")
- 학생 (hasAndBelongsToMany의 "달력")
- 교사 (hasMany의 "달력")
이제 9 학년 학생들을위한 승인되지 않은 모든 가입 목록을보고 싶습니다. 목록에 달력 날짜, 학생 이름 및 교사 이름을 포함 시키길 원합니다.
이$this->request->data = $this->Student->CalendarsStudent->find('all', array(
'conditions' => array(
'CalendarsStudent.is_approved' => null,
'Student.grade' => 9
)
));
위의 코드의 문제는 반환 된 배열이 교사의 이름이 빠져 있다는 점이다 : 나는 find
매개 변수에 'recursive' => 2
를 추가 할 경우
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
)
)
)
을 나는 방법을 얻을 나는 같은 것을 할 것 너무 많은 정보. $this->request->data[0]['Calendar']
은 내가 원하는대로 [Teacher]
을 가지지 만, 원하지 않는 것은 [Student]
이 될 것입니다. 또한 $this->request->data[0]['Student']
에는 내가 원하지 않는 서브 어레이가 있습니다. Containable
이 문제를 해결할 것으로 보이지만 그 중 하나는 작동하지 않습니다.
아이디어가 있으십니까?
은 내가 -1로 설정하면 다음, 그것은 -1로 설정되어 있지 않습니다 그래서 난 적은 데이터를 검색하려는 경우가 ... 을 그렇게 나쁘지 않을 수도 있습니다 많은 경우에 기본적으로 매우 유용 나는 당신이 말한 것처럼 수용 할 수있는 것을 사용합니다. – Alvaro
@Dave 나는 당신의 대답을 고맙게 생각하지만, 내가 말했듯이, 나는 'Containable'을 시도해 보았고 그렇게 할 수 없었다. 배열에 'contains'=> array ('CalendarsStudent', 'Calendar'=> 배열 ('Teacher'), 'Student')'매개 변수에 'find'매개 변수가 있습니다. 거기에'recursive'가 있는지 여부에 관계없이 반환 된 배열에는 전혀 영향을 미치지 않았습니다. – Nick
Container를 사용할 때는 @Nick - recursive를 -1로 설정해야합니다. 당신이 Containable을 일하게 할 수 없다면, 질문을 "일할 수있는 용기있는 방법"으로 게시하십시오. 그러나이 경우 Containable은 갈 길입니다. – Dave