原则 2.1 - 日期时间列默认值
有人可以告诉我如何在日期时间列上添加默认值吗?我不能这样做:
protected $registration_date = date("Y-m-d H:i:s", time());
那么我该如何处理呢?
Could someone tell me how to add the default value on a DateTime column? I can't do it like this:
protected $registration_date = date("Y-m-d H:i:s", time());
So how can I handle it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
对于默认值 CURRENT_TIMESTAMP:
或者对于较旧的 Symfony 版本:
为我工作...但是,这仅适用于 MySQL。
For default value CURRENT_TIMESTAMP:
Or for older Symfony versions:
Worked for me... However this works only with MySQL.
您将属性映射为 DateTime 类型,然后使用新的 DateTime 实例在构造函数中设置值:
这是因为在水合作用时不会调用持久类的构造函数。
You map your property as DateTime type then set the value in the constructor using a new DateTime instance:
This works as the constructor of a persisted class is not called upon hydration.
如果您想要非常精确,您还可以使用生命周期回调:
You can also use lifecycle callbacks if you want to be very precise:
我认为,完成日期时间自动填充的最佳方法是这样:
将逻辑放入构造函数不是正确的解决方案,因为设置默认值是SQL客户端的责任。如果您决定不再使用 ORM - 您将失去业务逻辑。另外,如果使用构造函数,您将无法向现有行的
datetime
属性添加默认时间戳。I think, the best way to accomplish autofill for
datetime
is to make like that:Putting logic to constructor isn't right solution, because setting default values are SQL client responsibility. If you decide no longer use ORM - you will lost business logic. Plus, if using constructor you won't be able to add default timestamps to
datetime
attributes for existing rows.有一个扩展可以自动执行此操作...
https://github.com/l3pp4rd/DoctrineExtensions /blob/master/doc/timestampable.md
There is an extension for this automating this...
https://github.com/l3pp4rd/DoctrineExtensions/blob/master/doc/timestampable.md
这会起作用。只是发布供将来参考。
This will work. Just posting for future ref.
为我使用 MySql 和 Symfony 3.4。
Work for me with MySql and Symfony 3.4.
对于
doctrine-bundle: 2.10
和 PHP 属性,设置默认值:For
doctrine-bundle: 2.10
and PHP Attributes, setting a default value: