【发布时间】:2020-05-15 10:49:10
【问题描述】:
我在数据库中创建了这样的表。
Schema::create('packages', function (Blueprint $table) {
$table->increments('id');
$table->unsignedInteger('count');
$table->timestamp('expire_date');
$table->timestamps();
});
现在假设我们在数据库中有以下记录:
+----+-------+---------------------+---------------------+---------------------+
| id | count | expire_date | created_at | updated_at |
+----+-------+---------------------+---------------------+---------------------+
| 1 | 120 | 2018-01-31 19:22:45 | 2018-01-29 17:12:01 | 2018-01-29 19:22:45 |
| 4 | 140 | 2018-02-14 19:05:01 | 2018-01-29 17:20:16 | 2018-01-29 19:05:01 |
| 27 | 10 | 2018-02-17 19:01:10 | 2018-01-29 19:05:01 | 2018-01-29 19:05:01 |
+----+-------+---------------------+---------------------+---------------------+
当我尝试使用 laravel eloquent 编辑记录时:
$package = \App\Package::find(1);
$package->count = 100;
$package->save();
save 方法将 expire_date 和 updated_at 列都更改为当前时间!
+----+-------+---------------------+---------------------+---------------------+
| id | count | expire_date | created_at | updated_at |
+----+-------+---------------------+---------------------+---------------------+
| 1 | 100 | 2018-01-29 19:32:24 | 2018-01-29 17:12:01 | 2018-01-29 19:32:24 |
| 4 | 140 | 2018-02-14 19:05:01 | 2018-01-29 17:20:16 | 2018-01-29 19:05:01 |
| 27 | 10 | 2018-02-17 19:01:10 | 2018-01-29 19:05:01 | 2018-01-29 19:05:01 |
+----+-------+---------------------+---------------------+---------------------+
为什么 expire_date 的值会发生变化,甚至没有触摸它?!!!
【问题讨论】:
-
@TimLewis 我在问为什么 expire_date 会发生变化。
-
也许你正在使用另一个包,而那个包改变了字段
-
@MahdiYounesi 不,我找到了原因。这是因为 mysql 自动初始化和更新 TIMESTAMP 和 DATETIME dev.mysql.com/doc/refman/5.7/en/timestamp-initialization.html
-
你应该使用 Datetime 作为那个 'expire_at' 列。
标签: laravel laravel-5.5