Laravel`model->更新($ data)`将pm时间改为am

时间:2016-03-01 16:26:07

标签: mysql laravel laravel-4

我的时间似乎正在更新,但当我在数据库(mysql)中查找字段时,我发现时间已更改为 AM 。这种情况发生在->update但不是::create

这是我的 在->update电话

之前 $ data =输入::所有()
array(14) { ["_method"]=> string(5) "PATCH" 
            ["_token"]=> string(40) "A3OknqVoHtva73nn5HZTBYyFd8v42WOUNlc3ED5G" 
            ["start_time"]=> string(6) "4:30pm" 
            ["end_time"]=> string(6) "5:30pm" 
           } 

这是我的控制器代码。

控制器

public function update($id)
{
    $scheduled_program = ScheduledProgram::findOrFail($id);

    $validator = Validator::make($data = Input::all(), ScheduledProgram::$rules);

    if ($validator->fails())
    {
      return Redirect::back()->withErrors($validator)->withInput()->with('id', $id);
    }

    if($validator->passes()) {
        $scheduled_program->update($data);
        $scheduled_program->save();
        dd($scheduled_program);
    }
}

dd($scheduled_program)显示

["start_time"]=> string(6) "4:30pm" ["end_time"]=> string(6) "5:30pm"

但在我的数据库中,我看到AM值04:30:00 05:30:00,当我打开显示值的页面时,它们是AM值。看起来模型正在更新,但它会在数据库中转换为AM值。

1 个答案:

答案 0 :(得分:1)

您可以使用Eloquent Accessors和Mutators自动设置或获取正确的格式来解决此问题。

我自动说,因为你不需要直接调用访问者或变种器,但你很简单就是这样:

 User::find(1)->start_time;

在后台,访问者方法将自动完成其工作。

Checkout Laravel文档Eloquent部分了解详情

https://laravel.com/docs/master/eloquent-mutators

您需要将其添加到模型中。

public function setStartTimeAttribute($value) { 
     $this->attributes['start_time'] = date("H:i:s", strtotime($value)); 
 }


 public function getStartTimeAttribute($value) { 
    return date("g:i a", strtotime($value)); 
 }