2014-12-15 2 views
0

Я создаю несколько webapp. Я не хочу, чтобы пользователь переписывал значение в базе данных, если он уже существует. Я пытаюсь проверить это с помощью поведения preSave(). Всякий раз, когда я пытаюсь получить значение из базы данных я получаю значение пользователь только что отправил в с $ _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; 
} 

Так что мой вопрос: Почему значение из базы данных никогда не NULL, но некоторые ИСТИНА или ЛОЖЬ пользователь выбрал форму? Это должно быть NULL, потому что в тот момент save() еще не был выполнен.

ответ

0

Я полагаю, вы получаете тот же объект из-за Propel instance pooling. Это только кэши ранее загруженные объекты. Таким образом, вы можете попытаться отключить объединение экземпляров для метода preSave:

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