【问题标题】:Symfony 1.4 preUpdate method never firingSymfony 1.4 preUpdate 方法永远不会触发
【发布时间】:2013-03-14 12:51:17
【问题描述】:

我有以下模型类:

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 方法永远不会运行。

有什么想法为什么不呢?

【问题讨论】:

    标签: php doctrine symfony-1.4


    【解决方案1】:

    当您从 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);
    }
    

    【讨论】:

    • 就是这样,非常感谢。我认为如果我直接通过模型的对象进行更新,我会使用 preUpdate?
    • @Trevelyan005 没错。您可以创建一个 updateHook 函数,如果它们做同样的事情,则从两者中调用它。
    猜你喜欢
    • 2014-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多