0

좋아요, 나는 여기에 매듭을 달고 있습니다 - 문제의 중심을 뚫고 나보다 더 명확한 머리가 필요합니다!CakePHP 수수께끼 - HasMany 관계로 저장

많은 세션 트랙이있는 모델의 라이브 세션 모델이 있습니다.

다른 사용자가 동일한 양식으로 사용자가 제출 한 세션 트랙 정보와 함께 사용자 세션을 편집합니다. 이이 양식에서 sessiontracks 정보를 잡아 들어 간다까지, 잘 작동

$temp = array(); 
foreach ($this->data['Sessiontracks'] as $track) { 
    if (!empty($track['name']) && !empty($track['starts_at'])) { 
     $temp[] = $track; 
    } 
} 
$this->data['Sessiontracks'] = $temp; 

$this->Livesession->Sessiontracks->deleteAll(
    array('livesession_id'=>$this->data['Livesession']['id']) 
); 
if ($fileok && this->Livesession->saveAll($this->data)) { 
    // success! 
} else { // failure! } 

및 :

순간

, 이것은 지금까지 너무 정교한 될 수있다, 나는이 일을 해요 양식이 편집 될 때마다 이전 세션 트랙 정보를 새 정보로 대체합니다. 인 경우 저장이 완료됩니다. 예를 들어 편집자가 강제 필드를 비워 두려고하면 저장에 실패하면 모든 세션 트랙 정보가 데이터베이스에서 삭제되고 대체되지 않습니다.

저장 한 후에 세션 트랙 정보를 삭제할 수 없습니다. 만약 내가 전혀 삭제하지 않으면, 나는 세션 트랙 테이블에 중복되거나 잘못된 정보로 끝난다. 하지만 사용자가 엄청난 수의 트랙 정보를 입력하고 잘못된 편집을 시도하여 정보를 잃을 위험을 감수하고 싶지는 않습니다.

아마도 saveAll이 실패하면 이전 sessiontracks 정보를 유지하고 deleteAll 이후 테이블에 다시 저장할 수 있습니까? 나는 분명히 내가 틀린 길을 완전히 잃어 버렸을 것이고, 더 깊은 곳에서 자신을 파헤 치고 싶지는 않을 것이라고 생각하고있다.

저장 실패시에도 내가 살아있는 것의 관련 데이터를 유지하는 가장 좋은 방법은 무엇입니까?

답변

0

그냥 $ids = find('list',array('conditions'=>array(..))) 전에 saveAll을 입력 한 다음 저장을 완료 한 후에 deleteAll(array('conditions'=>array('Model.id'=>$ids)))을 입력하십시오.

+0

아하, 감사합니다! 그것은 매우 합리적이고 논리적 인 접근 방식입니다 (그리고 매력처럼 작동합니다). 내가 겉으로보기에 명백한 해결책으로 넘어 가지 못하는 무언가에 너무 싸서 싫을 때 ... : - / – thesunneversets