tam*_*am5 8 php mysql laravel laravel-5 laravel-5.2
我只是遇到了Eloquent(Laravel 5.2.10)的默认时间戳.默认情况下,该$table->timestamps()方法为您提供表中的一个created_at和一个updated_at相应更新的列.
但是,当我尝试一些测试条目时,我注意到当你更新记录时,updated_at字段会更新,但是created_at字段也会更新:它的小时数保持在创建时间,但分钟和秒数会更新匹配该updated_at领域.
如果这太浪漫了,这是一个例子:
+---------------------+---------------------+
| created_at | updated_at |
+---------------------+---------------------+
| 2016-01-13 17:13:27 | 2016-01-13 22:13:27 |
| 2016-01-13 16:14:41 | 2016-01-13 21:14:41 |
+---------------------+---------------------+
Run Code Online (Sandbox Code Playgroud)
请注意,created_at和updated_at字段的分钟和秒完全相同.
我试图查看Model设置时间戳的类,但事实证明,setCreatedAt()只更新记录时确实没有调用该方法.
为什么会这样?
如何防止created_at场地变化?(更重要)
您的问题可能与此问题有关:https://github.com/laravel/framework/issues/11518
长话短说,很多人的created_at专栏都有这个ON UPDATE CURRENT_TIMESTAMP属性.
如Github页面所述:
MySQL 5.7不再允许0000-00-00作为打开严格模式的有效时间戳(默认情况下是这样).所以要么使用
->nullableTimestamps()或->timestamp()->useCurrent().
所以,你可以通过改变这个来解决这个问题:
$table->timestamps();
Run Code Online (Sandbox Code Playgroud)
对于以下任一选项:
// Option 1:
$table->nullableTimestamps();
// Option 2:
$table->timestamp('updated_at')->useCurrent();
$table->timestamp('created_at')->useCurrent();
Run Code Online (Sandbox Code Playgroud)
此外,在此MySQL页面上:https://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html
或者,如果
explicit_defaults_for_timestamp禁用(默认值),请执行以下任一操作:使用DEFAULT子句定义列,该子句指定常量默认值.
指定NULL属性.这也会导致列允许NULL值,这意味着您无法通过将列设置为NULL来分配当前时间戳.分配NULL会将列设置为NULL.
| 归档时间: |
|
| 查看次数: |
1970 次 |
| 最近记录: |