我正在Laravel 5.4
上构建一个小应用程序我正在尝试从前端接收来自datepicker小部件的日期并将其解析为Carbon日期格式,如下所示:
Carbon\Carbon::parse($request->schedule)->toDateTimeString();
继续我以前的问题:How to format date receiving through Vuejs Datepicker in laravel,我成功将其添加到我的数据库中,并在调用它时,我在我的模型中放置一个访问器并尝试以diffForHumans()
格式获取日期这是我之前的问题:A two digit month could not be found Data missing in 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);
}
我收到同样的错误:
无法找到两位数的数据
如果我做的话,同样的工作也很好:
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);
}
在我的模型中使用名称:Interaction
我将我的属性定义为:
public function getScheduleAttribute($value)
{
return Carbon::parse($value)->diffForHumans();
}
修改
仅供参考:我正在使用我的InteractionSummary
模型,并且有以下关系:
public function interaction()
{
return $this->belongsTo('App\Interaction');
}
答案 0 :(得分:3)
肯定你的问题是由这一行引起的:
$tempData->schedule = $meeting->schedule;
原因是,您有设置日期列(请参阅链接问题),如下所示:
protected $dates = [
'schedule', 'created_at', 'updated_at', 'deleted_at'
];
所以'时间表'被视为日期。
当您通过 $ meeting->时间表检索您的日程安排日期时,您的mutator会修改该值,并最终得到类似'1小时前'的内容。
因此,使用 $ tempData-> schedule = $ meeting-> schedule; ,您实际上是在尝试为$ tempData->计划设置无效日期。它将翻译为
$tempData->schedule = '1 hour ago';
当你在日期数组中将'schedule'标记为日期时,Laravel正试图用Carbon解析它。它希望以模型的$ dateFormat属性中指定的格式包含日期(默认为Y-m-d H:i:s)。
答案 1 :(得分:1)
正如@shock_gone_wild所说,如果你有'安排'在$ dates数组中,
protected $dates = [
'schedule', 'created_at', 'updated_at', 'deleted_at'
];
Laravel将为您提供Carbon \ Carbon实例。
如果是你的情况,你应该在发送之前格式化(否则它将是一个Carbon对象)。
$tempData->schedule = $meeting->schedule->format('Y-m-d');
答案 2 :(得分:0)
试试这个:
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)
{
$meetings[] = $tempData;
}
}
return response()->json(['meetings' => $meetings], 200);