【问题标题】:Laravel 5.1 Won't save date into database set as 00-00-00 00:00:00Laravel 5.1 不会将日期保存到设置为 00-00-00 00:00:00 的数据库中
【发布时间】:2026-01-01 11:15:01
【问题描述】:

我正在使用此 Bootstrap datetimepicker 发送日期,格式为 MMM D, YYY,由 MomentJS 创建,它不能提交与默认显示给用户的格式不同的格式。

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

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,或者根本没有设置日期,我不明白。

我不想更改时间戳在数据库中的格式,所以我没有在模型的$dates 数组中设置$dateFormat'start_date'。认为变异器似乎更容易。该字段在迁移文件中设置为date(),我很确定我之前已经这样做了,而且它确实有效。所以我在没有突变器的控制器中尝试了它,并且同一行有效:

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');
}

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

【问题讨论】:

  • Erm... 为什么你的 mutator 只是返回值而不是实际设置你的 start_date 属性?
  • 哈哈@MattGibson,哦,伙计,我一直在盯着这个看,在做其他事情,想知道哪里出了问题……谢谢!哦,真可惜。

标签: date laravel laravel-5 laravel-5.1


【解决方案1】:

这就是你如何为你的属性创建一个setter方法。注意:你不返回任何东西,你只是给属性赋值:

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

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

【讨论】:

    最近更新 更多