2012-12-27 3 views
0

Widget 테이블과 Yii Model 클래스가 있다고 가정 해 보겠습니다.Yii 저장할 수없는 모델 인스턴스 만들기

($tempWidget = new Widget) 인스턴스화 할 수 있지만 어떻게 든 데이터베이스에 저장할 수 없도록하고 싶습니다. 물건을 테스트하고 시뮬레이션 할 수있는 모델을 사용하고 싶습니다 ...

분명히 $tempWidget->save()을 호출하는 것을 피할 수는 있지만 절약 할 수없는 일종의 플래그가 필요합니다. 코드의 다른 부분은 그렇게하려고 시도합니다.

+1

상위 구현을 호출하기 전에이 플래그의 상태를 확인하기 위해 모든 저장 메소드 ('save()','insert()','update()')를 다시 구현하십시오. – DCoder

답변

0

원하는 것을 성취하기위한 몇 가지 방법이 있습니다. 이 모델과 연관된 규칙이있는 경우

public function beforeSave(){ 
    $this->attributes = $this->unsetAttributes(); 
} 

이에만 작동합니다 : 가장 쉬운 방법은 CModel unsetAttributes 방법, 예를 사용하여 모든 속성을 해제하기로 저장할 수있는에서 모델을 방지하기 위해 모델을 beforeSave() 방법을 수정하는 것입니다 (필수 필드가 하나 이상 있어야합니다.) 그렇지 않으면 기본 키 (PK가 자동 증가라고 가정)만으로 구성된 테이블에 항목이 생성됩니다.

+0

속성을 설정 해제 할 필요는 없습니다. 거짓을 반환하기 만하면 트릭을해야합니다. 사실, 부모 호출 :: beforeSave() 충분하지 않아 믿습니다. – MrSoundless

+0

재미있는 소리. 그리고 내가 원할 때 이것을 어떻게 발동합니까? 예를 들어'new widget ('temp')'와 같은 것? 정상적인 경우에는 '새로운 위젯'을 정상적으로 저장하고 싶습니다. –