2011-05-10 5 views
1

설명/설명에서 여러 삽입, hasMany의 항목의 ID를 얻기 다음 "이벤트 추가"페이지에서CakePHP의

, 여러 일정을 추가 할 수 있습니다. saveAll()을 실행하면 이벤트 데이터와 모든 일정 데이터가 저장됩니다. 올바르게 작동합니다.

그런 다음 일정 (들) 데이터를 처리하고 "날짜"테이블에서 개별 행을 작성하려고합니다.

Event hasMany Schedule 
Schedule belongsTo Event 
Schedule hasMany Date 
Date belongsTo Schedule 

그래서 - 난 (등 등 ... 시작 날짜를 반복 기준) 날짜 모델을로드하고, 전달 된 각각의 일정을 통해 반복 처리/날짜를 삽입하고있다.

내 문제/질문 : 날짜 ("schedule_id"필드)의 대한

나는 각 일정의 ID가 필요합니다. 반복하는 동안 개별 스케줄의 ID를 얻으려면 어떻게해야합니까? 현재, 나는 이것을하고있다 :

foreach($this->data['Schedule'] as $i => $value) { 
    $this->data['Date']['schedule_id'] = $this->Event->Schedule->id; 
    //other stuff here 
    $this->Date->saveAll($this->data['Date']); 
} 

그러나 그것은 나에게 모든 루프에서 같은 id를 준다.

답변

1

문제는 $this->Event->Schedule->id이 삽입물의 마지막 ID 만 보유한다는 것입니다. 이것이 항상 같은 이드를 얻는 이유입니다.

이벤트 컨트롤러의 추가 기능에서이 foreach 루프를 수행한다고 가정합니다. 각각의 insert-id를 원할 경우 이벤트에 saveAll을 수행하지 말고 이미 수행 한 것처럼 각 일정을 반복하고 거기에 일정을 저장하십시오. 다음과 같이 표시 될 수 있습니다.

foreach ($this->data['Schedule'] as $schedule) { 
    $schedule['event_id'] = $this->Event->id; //this is needed because we don't do a saveAll on the Event anymore 
    $this->Event->Schedule->save($schedule); 

    //Here comes your part 
    $this->data['Date']['schedule_id'] = $this->Event->Schedule->id; 
    //other stuff here 
    $this->Event->Schedule->Date->saveAll($this->data['Date']); 
} 

희망이 있습니다.

+0

도움이됩니다. 감사합니다. 유일한 문제는 saveAll()처럼 그것들을 함께 검증하지 않는다는 것입니다. 그 (것)들을 전부 첫째로 유효하게하는 방법 있는가? 그 후에 저축의이 유형을 하는가? 도와 주셔서 대단히 감사합니다! – Dave

+0

나는 내 자신의 질문에 대답했다고 믿는다 - 여기에 정보를 수동으로 확인할 수있다 : http://book.cakephp.org/view/1182/Validating-Data-from-the-Controller – Dave