我的工作有问题 'end_date'
数据库中的列。首先,我在申请一个待办事项。所以我有一张table叫 'Tasks'
包含以下列:
$table->increments('id');
$table->integer('user_id');
$table->string('title');
$table->mediumText('description');
$table->timestamp('end_date');
$table->integer('completed');
$table->timestamps();
当用户创建任务时,他们可以为该任务指定结束日期。我在utc+2时区,所以对于用户,我用utc+2显示所有时间,但我把它们存储在我的数据库中。
以下是实际存储函数的输入字段:
{{Form::date('end_date', \Carbon\Carbon::now()->timezone('Europe/Brussels'),['class' => 'form-control mb-2 mr-sm-2 mb-sm-0'])}}
{{Form::time('time', \Carbon\Carbon::now()->timezone('Europe/Brussels')->format('H:i'),['class' => 'form-control'])}}
因为我使用了两个输入字段,所以必须在store函数中将它们合并在一起:
public function store(Request $request)
{
$requestData = $request->all();
$task = new Task($requestData);
$inputDateAndTime = $requestData['end_date'].' '.$requestData['time'].':00';
$task['end_date'] = Carbon::createFromFormat('Y-m-d H:i:s', $inputDateAndTime, 'Europe/Brussels')->timezone('UTC');
$task['user_id'] = auth()->id();
$task['completed'] = 0;
$task->save();
return redirect('/tasks')->with('success', 'Task created');
}
在这个函数中,我指定用户给定了一个utc+2时区的时间,并希望它转换为utc(如预期的那样)
问题:因此,如果用户希望完成此任务,他们可以执行put请求来更新 'completed'
列,但当处理此请求时,我的结束日期列将在同一时间更改,而完全不触及该列。
我的更新功能:
public function update(Request $request, Task $task)
{
$task -> completed = 1;
$task->save();
return redirect('/tasks')->with('success', 'Task completed');
}
问题示例:
假设用户1创建了一个结束日期如下的任务= 08/18/2018 20:14
注意,这个时间是utc+2的,所以我说把这个转换成utc。
在store函数之后,我检查数据库,结束日期如下= 2018-08-18 18:14:00
如果正确,现在让我们看看运行update函数时的结束日期:
public function update(Request $request, Task $task)
{
dd($task->end_date);
// the result:
Carbon @1534616040 {#552 ▼ date: 2018-08-18 18:14:00.0 utc(+00:00)
}
}
所以仍然是相同的值,但是如果我正常运行update函数并检查数据库,这就是我的值: 2018-08-18 17:24:27
,我注意到我更新的\u at字段有相同的最后2位数字,所以它以某种方式占用了我假设的当前时间。我的最新地址: 2018-08-18 15:24:27
知道我做错什么了吗?
1条答案
按热度按时间ix0qys7i1#
时间戳是由db-do控制的,当一个记录被更新时,它将反映这一点。要使自定义字段仅在需要时更改,请使用datetime。