2013-05-01 4 views
0

복합 키를 사용하는 중첩 속성에 문제가 있습니다.cfwheels - 사용되지 않은 복합 키 쌍 제거

복합 키가 포함 된 중첩 된 속성의 인스턴스가 여러 개인 모델을 편집 할 때 빈 키로 남겨 두도록 업데이트하려는 경우 cfWheels은 더 이상 사용되지 않는 속성을 제거하지 않으며 이전 값을 유지합니다. 중첩 모델에서 delete를 호출하지 않고 이들을 삭제하는 방법이 있습니까?

모든 중첩 된 속성을 삭제하여 수행 한 다음 update()은 필요한 레코드를 생성하지만 그 중대한 문제는 내가 실패한 코드가있을 때 해당 코드를 삭제하는 것입니다. 당신은 아주 나쁠 수 있다는 것을 압니다.

+0

또한 업데이트를 실행하고 키 조합이 이미 존재하면 '중복 키를 삽입 할 수 없습니다.'오류가 발생합니다. – Daniel

답변

1

을 찾을 수 있으며, allowDelete 옵션을 추가하십시오 :

nestedProperties(association="comments", allowDelete=true); 

해당 모음 내에서 모델 _delete라는 속성이 그런 경우에 그 true으로 설정하면 CFWheels에서 해당 레코드를 삭제합니다.

질문에 세부 정보가 포함되어 있지 않기 때문에 잘 모르겠지만 중첩 모델에 대한 조건을 확인하는 beforeValidationOnUpdate 콜백을 실행하고 레코드를 삭제해야 할 때 _delete = true을 설정할 수 있습니다. 예를 들어

:

이 당신에게 중첩 된 복합 키에 문제를 줄 것인지 확실하지. 때때로 중첩 된 속성은 "특별한"사례가있는 약간의 kludgy입니다.

+0

모델을 이미 설정 했으므로'_delete' 열을 추가했는데 동작은 변경되지 않았습니다. 나는 그 고리를 시험해보고 그것이 효과가 있는지 볼 것이다. 나는'_delete' 열을 사용하면 중첩 된 속성을 숨길 수는 있지만 PRIMARY KEY 제약 조건을 위반 한 문제는 해결하지 못할 것이라고 염려합니다. '객체에 중복 키를 삽입 할 수 없습니다. ' – Daniel

+0

모델에서 (업데이트 할 때) 제거 할 중첩 된 속성을 어떻게 알 수 있습니까? – Daniel

+0

'_delete'는 "가상"속성이므로 테이블에 일치하는 열이 필요하지 않습니다. 부모 개체를 업데이트하면 해당 개체를 통해 이동해야하며 해당 속성으로 삭제 표시된 모든 자식에 대해 삭제를 실행해야합니다. –

1

allowDelete 속성이 nestedProperties에 defalut allowDelete에 의해 바퀴에서 거짓으로 설정되어 있으며 복합 키 양식 표가 삭제되지 않는다고 언급하는 것을 잊었을 것 같습니다. 당신은 그것을 사실로 설정해야합니다. 예를 들어 모델에서 이와 같은 작업을해야합니다.

<cfset hasMany(name="campaignlanguages",shortcut="languages", dependent="deleteAll") /> 
    <cfsetnestedProperties(associations="campaignlanguages",allowDelete="true")/> 

당신이 nestedProperties()init 호출에서 자세한 내용 here