无法找到两位数的月份Laravel的Carbon缺少数据

Nit*_*mar 5 php laravel php-carbon laravel-5.4

我正在构建一个小应用程序,Laravel 5.4 我正试图从前端接收来自datepicker小部件的日期并将其解析为Carbon日期格式,如下所示:

Carbon\Carbon::parse($request->schedule)->toDateTimeString();
Run Code Online (Sandbox Code Playgroud)

继续我之前的问题:如何通过laravel中的Vuejs Datepicker格式化日期接收,我成功地将其添加到我的数据库中,并且在调用它时我在我的模型中放置一个访问器并尝试以diffForHumans()格式获取日期前面的问题:一个两位数一个月找不到在Laravel数据丢失,这个作品每当我取模型完全正常的,直到在获取车型在控制器我不分配这个计划属性为任何其他变量,现在并使用以下内容分配值:

public function getData()
{
    $user = Auth::user();
    $summaries = InteractionSummary::all();
    $meetings = [];
    foreach($summaries as $summary)
    {
        $company = [];
        $tempData = $summary->interaction->where('user_id', $user->id)->get()->first();
        if($tempData)
        {
            $meeting = Interaction::find($tempData->id);
            $tempData->schedule = $meeting->schedule;
            $meetings[] = $tempData;
        }
    }
    return response()->json(['meetings' => $meetings], 200);
}
Run Code Online (Sandbox Code Playgroud)

我得到了同样的错误:

无法找到两位数月份数据缺失

如果我这样做,同样的工作完全正常:

public function getFutureData()
{
    $user = Auth::user();
    $currentTime = Carbon::now();
    $interactions = $user->interaction->where('schedule', '>=', $currentTime);
    $meetings = [];
    foreach($interactions as $interaction)
    {
        $interaction->meeting = $meeting;
        $meetings[] = $interaction;
    }
    return response()->json(['interactions' => $meetings], 200);
}
Run Code Online (Sandbox Code Playgroud)

在我的名字模型中:Interaction我正在定义我的属性,如下所示:

public function getScheduleAttribute($value)
{
    return Carbon::parse($value)->diffForHumans();
}
Run Code Online (Sandbox Code Playgroud)

编辑

仅供参考:我有我的InteractionSummary模特并且有以下关系:

public function interaction()
{
    return $this->belongsTo('App\Interaction');
}
Run Code Online (Sandbox Code Playgroud)

sho*_*ild 5

最肯定的是,您的问题是由这一行引起的:

$tempData->schedule = $meeting->schedule;
Run Code Online (Sandbox Code Playgroud)

原因是,您设置了日期列(请参阅链接问题),如下所示:

protected $dates = [
'schedule', 'created_at', 'updated_at', 'deleted_at'
];
Run Code Online (Sandbox Code Playgroud)

因此,'schedule' 被视为日期。

当您通过$meeting->schedule检索您的日程安排日期时,该值由您的 mutator 修改,并以“1 小时前”之类的内容结束。

所以用 $tempData->schedule = $meeting->schedule; 您实际上是在尝试为 $tempData->schedule 设置无效日期。它会翻译为

$tempData->schedule = '1 hour ago';
Run Code Online (Sandbox Code Playgroud)

当您在日期数组中将 'schedule' 标记为日期时,Laravel 试图用 Carbon 解析它。它期望具有在模型的 $dateFormat 属性中指定的格式的日期(默认为 Ymd H:i:s)。