Php Symfony 1.4预更新方法从不触发

Php Symfony 1.4预更新方法从不触发,php,doctrine,symfony-1.4,Php,Doctrine,Symfony 1.4,我有以下模型类: class ContractDetails extends BaseContractDetails { public function updateContractDetailsByConId($conId, $key, $value) { $q = Doctrine_Query::create() ->update('ContractDetails'); if ($value === null) {

我有以下模型类:

class ContractDetails extends BaseContractDetails {

    public function updateContractDetailsByConId($conId, $key, $value) {
        $q = Doctrine_Query::create()
              ->update('ContractDetails');
        if ($value === null) {
            $q->set($key, 'NULL');
        } else {
            $q->set($key, '?', $value);
        }

        $q->where('cd_con_id = ?', $conId)
                ->execute();

        return $q;
    }
    public function preUpdate($values) {
        $test = "test";
    }
 }
我想要的是在更新“UpdateTractDetailsByConid”方法行之前运行一些代码。根据我的调查,我应该能够使用内置挂钩,即预更新 但是preUpdate方法从未运行过


知道为什么不吗?

当您从DQL查询更新时,需要挂接到DQL回调。有关更多信息,请参阅

在代码中,您需要更新的
preUpdate

public function preDqlUpdate($values) {
   $test = "test";
}
不要忘记,正如文档中提到的,您需要隐式地打开DQL回调。在ProjectConfiguration.class.php文件中,添加:

public function configureDoctrine(Doctrine_Manager $manager)
{
   $manager->setAttribute(Doctrine::ATTR_USE_DQL_CALLBACKS, true);
}

就这样,非常感谢。我认为如果我直接通过模型的对象进行更新,我会使用preUpdate?@Trevelyan005。您可以创建一个
updateHook
函数,如果它们执行相同的操作,则从这两个函数调用它。