Symfony 1.4 preUpdate方法从不开火

时间:2013-03-14 12:51:18

标签: php doctrine symfony-1.4

我有以下模特课:

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";
    }
 }

我想要的是在更新“updateContractDetailsByConId”方法行之前运行一些代码。根据我的调查,我应该能够使用内置的钩子,即preUpdate 但是preUpdate方法永远不会运行。

任何想法为什么不呢?

1 个答案:

答案 0 :(得分:2)

从DQL查询更新时,需要挂钩DQL回调。有关详细信息,请参阅documentation here

在您的代码中,您需要更新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);
}