作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一堆同时具有 date_created 和 date_modified 字段的实体,我试图让这些字段在插入或更新时自动设置。 date_created 仅在插入时设置,但 date_modified 在插入或更新时设置。
我的实体类中有一个带有@PreUpdate 注释的方法,但它似乎只在实体更新时才会被调用。插入新实体时不会调用它。文档是这样描述 preUpdate 事件的:
“preUpdate 事件发生在对实体数据进行数据库更新操作之前。”
这是正确的行为吗?如果是这样,在更新或插入之前调用方法的最佳方法是什么?目前,如果我同时使用 @PreUpdate 和 @PrePersist 标记该方法,那么它就可以工作,但我不确定这是否是最佳的:
/**
* @PreUpdate
* @PrePersist
*/
public function beforeSave()
{
if (!$this->getCreatedAt()) {
$this->setCreatedAt(new \DateTime());
}
$this->setModifiedAt(new \DateTime());
}
最佳答案
Persist 和 Update 是 2 个不同的事件,因此如果您希望对它们都应用回调,那么您将需要这两个注释。创建两个方法可能会消除您的疑虑:
/**
* @PrePersist
*/
public function beforePersist()
{
$this->setCreatedAt(new \DateTime());
$this->setModifiedAt(new \DateTime());
}
/**
* @PreUpdate
*/
public function beforeUpdate()
{
$this->setModifiedAt(new \DateTime());
}
关于php - Doctrine 2 preUpdate 事件 - 插入时未触发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3754775/
在我们的数据库表上,我们使用两个唯一的非聚集索引来创建跨四个字段的唯一约束。我们使用两个,因为其中一个字段 ZipCode 是一个可为空的字段。如果表中存在一条包含 ZipCode 的 null 条目
我刚刚开始学习 Rails 3 教程,以便对框架有一点熟悉,但我在生成 schema.rb 时遇到了问题。我的操作系统是 Windows 7 x64、Ruby 1.9.2、MySQL2 gem 0.2
我是一名优秀的程序员,十分优秀!