我有一个控制器,它通过请求对象更新模型。它看起来
$save_series = Series::where('id','=',$request->input('data.item.id'))->with('booking')->first();
$save_series->name = $request->input('data.item.name');
$save_series->color = str_replace('#', '', $request->input('data.item.color'));
$save_series->production_company = $request->input('data.item.production_company');
$save_series->booking->start = $request->input('data.item.booking.start');
$save_series->booking->end = $request->input('data.item.booking.end');
$save_series->booking->save();
$save_series->save();
当我保存相关的"预订"对象已更新。如果"结束"日期属性被更改,然后"开始"属性的时间设置为当前时间;这不应该是这样的!它似乎完全忽略了解析的$ request开始时间。
在预订的相关模型上,我已经放置了一个setter mutator来查看问题是否存在于该点之前 - 日期正在被正确解析,但一旦它到达数据库就已经改变了。我的设置(仅适用于此测试)如下所示:
public function setStartAttribute($time) {
error_log(":::::::::::TEST BELOW:");
error_log($time);
return $time;
}
错误日志结果为:
PHP message: :::::::::::TEST BELOW:
PHP message: 2016-10-27 00:00:00
然而,"开始&#34>的数据库字段对于此记录,请阅读:
2016-10-27 13:07:53
请有人解释一下这里到底发生了什么;我完全失败了!
- 根据要求提供的其他信息 -
迁移导致问题:
Schema::create('calendar_events', function (Blueprint $table) {
$table->increments('id')->unsigned();
$table->integer('calendar_event_type')->references('id')->on('calendar_event_types');
$table->timestampTz('start');
$table->timestampTz('end');
$table->softDeletes();
$table->timestamps();
});
修复问题的迁移解决方案:
Schema::create('calendar_events', function (Blueprint $table) {
$table->increments('id')->unsigned();
$table->integer('calendar_event_type')->references('id')->on('calendar_event_types');
$table->dateTime('start');
$table->dateTime('end');
$table->softDeletes();
$table->timestamps();
});
我认为这与MySQL对timestampTz的支持以及我将其发送到数据库的格式有关。改变了这个问题后,我的问题现在得到了解决,非常感谢@FrankProvost!
我认为现在不可能维持时区。在我的用例中,时区不会是一个问题,但它会很好。
答案 0 :(得分:0)
我不知道原因,但在添加其他时间戳时(除了默认创建和更新时),您应该在添加默认时间戳后添加其他时间戳。
否则,表格似乎设置"设置更新时的当前时间戳"标记到错误的列。
而不是
$table->timestamp('my_custom_date');
$table->timestamps();
始终选择
$table->timestamps();
$table->timestamp('my_custom_date');