0

次のモデルクラスがあります。

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メソッドが実行されることはありません。

何かアイデアはありませんか?

4

1 に答える 1

2

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);
}
于 2013-03-14T12:59:11.173 に答える