2012-02-16 7 views
1

두 테이블 사이에 관계를 추가 할 때 외부 테이블의 업데이트시 및 삭제시 이벤트에 트리거를 추가 할 수있는 옵션이 제공됩니다. 이제 외부 테이블을 삭제하면 On-Delete 이벤트가 로컬 테이블에서 트리거된다는 것을 알고 있습니다.업데이트시 및 삭제시 트리거

이 예는 일대일 관계의 사용자 및 프로필입니다. Propel에서는 외래 키를 사용하여 쿼리하는 것보다 첨부 된 레코드를 찾는 것이 더 간단한 기능을 제공합니다. 이제 CASCADE의 On-Delete 트리거를 사용하여 사용자 테이블에 대한 외래 키로 기본 키를 설정했습니다. 즉, 사용자 레코드를 삭제하면 프로필 레코드도 제거됩니다.

이제 계단식 On-Update 트리거는 무엇입니까? propel을 사용할 때 프로필을 저장하지 않고 프로필을 변경할 수 있고 프로필에 대해 계단식 업데이트가 있으면 사용자를 저장할 때 프로필 정보를 자동으로 저장/업데이트합니까??

표가 Propel에 대해 알지 못하므로 그 이유는 On-Update에 대한 다른 이유가 있어야하고 the Propel documentation은 On-Delete 트리거의 사용에 대해서만 설명하기 때문입니다.

Propel과 관련된 모든 종류의 통찰력이 크게 감사하겠습니다. 일부 일반적인 정의는 내가 찾고있는 것이 아닙니다.

답변

2

1.2 이후로 변경된 사항이없는 한, 이는 일 반적인 RDBMS 제약 조건 (mysql 5.5 constraints docs)에 대한 단순 구현 (원시 또는 에뮬레이트)입니다. 이것은 데이터베이스와 관련이있는 추진력과 아무 관련이 없습니다. 따라서 ON UPDATE은 업데이트 된 키 값을 캐스케이드 할 수있게합니다. 이는 값을 변경할 수있는 FK가 있다고 가정합니다. 그것은 다른 열과 관련이 없습니다.

사용자가 프로필을 업데이트 할 때 계단식 연결을 설정하면 사용자를 저장할 때 프로필 정보가 자동으로 저장/업데이트됩니까?

CASCADE을 저장하지 않은 경우에도 관련 개체가 저장 대상 개체에 수화되면이 작업이 수행됩니다. ON UPDATE 물건은 이것과 아무 관계가 없습니다. 두 가지가 관계를 가지고 있으며 따라서이를 허용하는 각 클래스에 개체 멤버가 있습니다. 객체에 save를 호출하면 모든 수화 된 객체와 컬렉션을 거쳐 변경된 것으로 표시된 객체를 저장합니다.

+0

괜찮 았어. 그래서 만약 getprofile() (내 1-1 관계 때문에)을 호출하여 프로파일을 수화 시키면, 사용자가'save()'를 호출하면 프로필이 자동으로 업데이트된다. (아는 프로파일이 수정되었습니다)? –

+0

예. 관계의 반대편에서도 마찬가지입니다. – prodigitalson

+0

후속 조치. '$ profile = $ user-> getProfile();'을 실행하면 다음과 같이 수정됩니다 :'$ profile-> setName ('Member');'그러면'$ user' ,'$ profile'도 잘 저장 될 것입니다. ('getProfile()'은 일대일 관계를 사용할 때 내장 된 Propel 메소드입니다, OP의 링크를보세요) –

관련 문제