Propel preSave()无法从数据库中获取记录

时间:2014-12-15 15:42:59

标签: php orm propel

我正在构建一些webapp。我不希望用户在数据库中重写值(如果已存在)。我试图用preSave()行为检查这一点。每当我尝试从数据库中获取值时,我都会获得用户刚刚使用$ _POST []

发布的值
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,但是用户在表单中选择了一些TRUE或FALSE?它应该是NULL,因为在那一刻save()尚未执行。

1 个答案:

答案 0 :(得分:0)

我想,由于Propel instance pooling,你得到了同一个对象。它只是缓存以前获取的对象。因此,您可以尝试为preSave方法禁用实例池:

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