2014-12-15 5 views
0

일부 webapp를 구축 중입니다. 이미 사용자가 데이터베이스에 값을 다시 작성하는 것을 원하지 않습니다. preSave() 비헤이비어로 이것을 검사하려고합니다. TRUE 또는 FALSE 일부 데이터베이스에서 값이 NULL 결코 왜,하지만 : 내가 데이터베이스에서 값을 얻으려고 할 때마다 난 그냥 $ _POST에 게시 된 사용자 []Propel preSave()가 레코드 양식 데이터베이스를 가져올 수 없습니다.

public function preSave(\PropelPDO $con = null) { 
    $obj = new UserQuery(); 
    //let's check if user has set the value 
    $type = $obj->findOneById($this->getId())->getType(); 
    var_dump($type);// <-- here the value from database is always as user 
        //have just been selected in form. The value in database 
        //actually is NULL 

    //if type in database have been saved then set the current type from database 
    if(!is_null($type)) 
     $this->setType($type); 

    return true; 
} 

그래서 내 질문은 값을 얻을 사용자가 양식을 선택 했습니까? 그 순간에 save()가 아직 실행되지 않았으므로 NULL이어야합니다.

답변

0

나는 Propel instance pooling 때문에 같은 대상을 얻고 있다고 가정합니다. 그냥 캐시 이전에 가져온 개체. 따라서 preSave 메소드의 인스턴스 풀링을 비활성화 할 수 있습니다.

public function preSave(\PropelPDO $con = null) { 
    \Propel::disableInstancePooling(); 
    // your code... 
    \Propel::enableInstancePooling(); 
}