我有以下模特课:
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方法永远不会运行。
任何想法为什么不呢?
答案 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);
}