2011-08-30 3 views
3

모델의 afterSave 콜백에서 멀리 떨어진 협회에서 데이터에 액세스하려는 상황이 있습니다. 이는 매우 유익한 연결 고리가있는 레거시 데이터 모델입니다. 내가 찾은 것은 콜백 내에서 모델에 대한 찾기 호출을 실행할 수 있지만 바로 종료하면 레코드가 데이터베이스에 삽입되지 않는다는 것입니다. 레코드가 없으면 현재 모델에 삽입 된 데이터를 사용하여 관련 모델에서 찾기를 실행할 수 없습니다.CakePHP afterSave Timing

afterSave 콜백이 참여하는 시점에 데이터가 실제로 커밋 된시기에 대해 언급하지 않았습니다. 기존 코드로 작업하고 있지만 거래가 구체적으로 이루어지고 있음을 알 수 없으므로 옵션이 무엇인지 파악하려고합니다.

감사합니다. 우리는 이벤트 등록을 복용하고 있지만 사람들이 나열 기다려 할 수 있습니다

UPDATE

시나리오의 요지는 이것이다. 사용자는 주어진 Date에 등록 (또는 등록) 할 수 있습니다. 등록이 완료되면 (WaitList.date_id) 등록 날짜에 등록 사용자 (WaitList.user_id)에 대한 레코드가 있는지 대기 목록을 확인해야합니다. 그러한 레코드가 있으면 활성 레코드가되므로 레코드를 삭제할 수 있습니다.

레거시 스키마는 등록이 날짜에 직접 연결되지 않는 장소에 나를 둔다. 따라서 Date.id을 쉽게 얻을 수 없다. 대신 Registration->Registrant->Ticket->Date. Unintuitive, 나도 알아,하지만 지금은 그것이 무엇인지. 심지어 더 나은 (풍자 포함), 우리는 attendees라는이 정보를 모두 롤백하고 새로 만든 Registration->id을 사용하여 Attendee.date_id을 반환 할 수 있습니다. 레코드가 존재하지 않으므로 뷰에서 사용할 수 없습니다.

좀 더 자세한 정보를 제공하시기 바랍니다.

답변

0

애프터 세이브 내에서 찾기 쿼리의 목적은 무엇입니까?

업데이트

가 제대로 레코드를 연결할 수 전혀인가? 아니면 우리가 그만한 가치가 있기에 너무 많은 리팩토링에 대해 이야기하고 있습니까? 레코드 간의 연관을 수정할 수없는 경우 검사를 컨트롤러로 옮길 수 있습니다. 같은

뭔가 (사이비 코드)

if (save->isSuccessful) { 
    if (onWaitList) { 
     // delete record 
    } 
} 

그렇지 않은 가장 좋은 방법이지만, 그것은 당신의 문제를 해결을 얻을 것이다.

+0

나는 약간의 배경 지식으로 질문을 업데이트했다. 어쩌면 그것이 당신의 질문에 대답하는 데 도움이 될 것입니다. –

+0

내 대답 업데이트 –

+0

이 응용 프로그램은 여기 저기에 있습니다. 내가보기 및 다른 재미있는 모든 종류의 물건에서 데이터 조작을 논쟁하려고합니다. 스키마와 모든 기존 데이터를 다시 작업하면 안됩니다. 나는 그 자리에 진절머리 나는 솔루션을 가지고 있지만 괜찮은 옵션을 찾고있어 누락 된 데이터베이스 레코드가 시작하기에 좋은 장소 인 것 같습니다. 솔직히 말해서 나는 'aftersave'에서 기대하지 않았다고 말할 수있는 한 가지입니다. –