原则:如何手动设置实体的MySQL时间戳

大卫

我想更新一个实体,但还要保留其现有的时间戳。换句话说,在大多数情况下,我希望此MySQL时间戳自动执行其设计的工作,但在某些情况下,我想作弊-潜入更新而无需更改此最后修改列。当然,使用SQL手动执行此操作很容易:

UPDATE events SET admin_notes = "foo", lastmod = lastmod WHERE /*...*/

但是我不知道如何让教义做到这一点。

实体被调用Application\Entity\Event,列/注释看起来像:

/**
 *  @ORM\Column(name="lastmod",type="datetime") 
 *  @var \DateTime
 */
protected $modified;

相关表中的基础表定义:

lastmod timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

因此,我得到一个Event尝试,例如

$timestamp = $event->getModified();
echo "existing timestamp is: ".$timestamp->format('Y-m-d H:i:s')."\n";
//2016-06-07 10:13:15

$event
    ->setAdminNotes("this is an update at ".date('Y-m-d H:i:s'))
    ->setModified($timestamp);
$em->flush();

这是行不通的。内存中实体对象中的时间戳是“正确的”,即未更改,但是在实际数据库中,它被设置为当前日期时间,好像没有听到我说的那样。当然,查看SQL日志就是这种情况。My$event->setModified($timestamp)不会将其放入生成的SQL语句中。

是的,我意识到我可以将表的数据类型更改为MySQL日期时间,并在整个应用程序中手动进行处理。现在没有选择。

为了论证,我尝试Doctrine\DBAL\Connection从实体管理器获取并运行executeUpdate($SQL)自己,然后(从SQL日志中)发现,如果我之前这样做flush(),它将被忽略。因此,目前唯一可行的方法非常丑陋:将旧时间戳记保存在变量中,执行一次flush(),然后运行另一个UPDATE手动将其设置回之前的状态。

有什么建议?

丹尼斯·阿里莫夫(Denis Alimov)

主义认为您没有修改$ timestamp对象,这就是为什么它不包含在sql查询中。尝试

$newTimestamp = clone $timestamp; 
$event->setModified($newTimestamp);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

什么决定了SignalR connectionID以及如何手动设置

来自分类Dev

如何在条形图中手动设置颜色

来自分类Dev

如何在ReactJS中手动设置输入值?

来自分类Dev

手动设置日期和时间-Java

来自分类Dev

Laravel手动更新时间戳

来自分类Dev

如何为Kendoui树列表手动设置数据

来自分类Dev

如何手动设置K-means集群的中心?

来自分类Dev

Docker swarm:如何手动设置节点名称?

来自分类Dev

您如何手动设置已登录的身份用户?

来自分类Dev

为什么手动设置时间与当前时间不同

来自分类Dev

如何手动设置已解析的dns记录

来自分类Dev

序列化时如何手动设置属性“名称”

来自分类Dev

FabricJS:如何手动设置对象的宽度和高度

来自分类Dev

如何手动设置关键点并提取特征

来自分类Dev

情节:如何为Scattergeo设置手动边框?

来自分类Dev

手动设置时间

来自分类Dev

如何手动设置已解析的dns记录

来自分类Dev

如何手动设置启动选项以从特定分区启动?

来自分类Dev

手动时间同步

来自分类Dev

如何手动设置剑道传呼机的总数

来自分类Dev

如何在不手动设置每个属性的情况下更新数据库中的实体对象?

来自分类Dev

如何手动以N:N关系加载相关实体?

来自分类Dev

如何配置X轴并手动设置d3.js的开始/结束时间

来自分类Dev

如何手动设置Bootstrap语言?

来自分类Dev

如何在VirtualBox中手动设置系统时间?

来自分类Dev

手动设置实体的ID

来自分类Dev

如何将当前日期或当前时间戳添加到手动useradd脚本?

来自分类Dev

为什么手动设置时间与当前时间不同

来自分类Dev

手动设置模型