我正在构建一些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()尚未执行。
答案 0 :(得分:0)
我想,由于Propel instance pooling,你得到了同一个对象。它只是缓存以前获取的对象。因此,您可以尝试为preSave
方法禁用实例池:
public function preSave(\PropelPDO $con = null) {
\Propel::disableInstancePooling();
// your code...
\Propel::enableInstancePooling();
}