更改时间戳而不修改数据库中的字段

zour9fqk  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(365)

我的工作有问题 '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 知道我做错什么了吗?

ix0qys7i

ix0qys7i1#

时间戳是由db-do控制的,当一个记录被更新时,它将反映这一点。要使自定义字段仅在需要时更改,请使用datetime。

相关问题