Laravel 5.1不会将日期保存到数据库集中00-00-00 00:00:00

时间:2015-10-21 23:06:32

标签: date laravel laravel-5 laravel-5.1

我正在使用此datetimepicker发送日期,其格式为MMM D, YYYMomentJS创建,无法提交与用户显示的格式不同的格式默认值。

所以在服务器端,我在模型中为日期添加了一个mutator:

public function setStartDateAttribute($startDate) {
    //dd(Carbon::parse($startDate)->toDateTimeString());
    return Carbon::parse($startDate)->toDateTimeString();
}

当我dd时,该值应为2015-10-22 00:00:00,但它会将日期保存为0000-00-00 00:00:00,或者根本就没有设置日期,我不知道理解。

我不想更改数据库中时间戳的格式,因此我没有设置$dateFormat并在模型的'start_date'数组中设置$dates。认为变异器似乎更容易。该字段在迁移文件中设置为date(),我很确定我之前已经完成此操作并且它只是起作用。所以我在没有mutator的情况下在我的控制器中尝试了它并且相同的线路工作:

public function update(TournamentRequest $request, $tournamentId)
{
    // Update a tournament with all fillable data, and persist to database
    $tournament = Tournament::find($tournamentId)->fill($request->except('start_date'));
    $tournament->start_date = Carbon::parse($request->start_date)->toDateTimeString();
    $tournament->save();

    return Redirect::route('dashboard.tournaments.index');
}

为什么在模型中没有mutator设置的情况下,相同的代码在控制器内工作,但在使用mutator时不起作用?

1 个答案:

答案 0 :(得分:0)

这是为属性创建setter方法的方法。注意:您不返回任何内容,只需为属性指定值:

public function setStartDateAttribute($startDate) {
    $this->attributes['start_date'] = Carbon::parse($startDate)->toDateTimeString();
}

假设您要在表格中设置名为start_date的字段。