Laravel 集合中创建的价值更改为人类可读

Laravel 集合中创建的价值更改为人类可读,laravel,collections,php-carbon,Laravel,Collections,Php Carbon,我试图输出一个集合,该集合是在一个JSON请求中为人类可读而创建的 以下代码起作用: $childComments = $comment->getParentsChildren($comment->id , $childCount)->with('creator')->get(); return $childComments->map(function($childComments){ return [ 'created_at' =>

我试图输出一个集合,该集合是在一个JSON请求中为人类可读而创建的

以下代码起作用:

$childComments = $comment->getParentsChildren($comment->id , $childCount)->with('creator')->get();

return $childComments->map(function($childComments){
    return [
        'created_at' => $childComments->created_at->diffForHumans()
    ];
});
问题是只返回在处创建的,我希望返回$childComments集合的其余部分,而不必手动添加每个属性

我试过这个:

return $childComments->map(function($childComments){

    $childComments->created_at = $childComments->created_at->diffForHumans();

}); 
然后抛出这个错误

{消息:“找不到两位数的月份↵数据丢失”,异常:“InvalidArgumentException”,…} 例外 : “无效辩论例外” 文件 : “/Applications/MAMP/htdocs/community/vendor/nesbot/carbon/src/carbon/carbon.php”

编辑访问者尝试:

控制器

return $childComments->each(function($childComments){

    $childComments->created_at = $childComments->humanDate;

});
评论模式

public function getHumanDate()
{
    return $this->created_at->diffForHumans();
}

现在,JSON输出中所有创建日期的时间戳字段都变为null。

更正:Eloquent将时间戳字段转换为Carbon对象或从Carbon对象转换为时间戳字段。无法将差异解析为新的碳对象

一个简单的解决方案就是将这个字段重命名为类似于
created\u diff
的名称,这样模型就不会试图解析它

您还需要从映射闭包返回对象,否则,集合将只填充空值:

return $childComments->map(function($childComments){
    $childComments->created_diff = $childComments->created_at->diffForHumans();
    return $childComments;
}); 
或者,由于对象是可变的并通过引用传递,您也可以只使用以下每个对象:

return $childComments->each(function($childComments){
    $childComments->created_diff = $childComments->created_at->diffForHumans();
}); 

更正:Eloquent将时间戳字段与碳对象进行转换。无法将差异解析为新的碳对象

一个简单的解决方案就是将这个字段重命名为类似于
created\u diff
的名称,这样模型就不会试图解析它

您还需要从映射闭包返回对象,否则,集合将只填充空值:

return $childComments->map(function($childComments){
    $childComments->created_diff = $childComments->created_at->diffForHumans();
    return $childComments;
}); 
或者,由于对象是可变的并通过引用传递,您也可以只使用以下每个对象:

return $childComments->each(function($childComments){
    $childComments->created_diff = $childComments->created_at->diffForHumans();
}); 

你试过“访问器”吗@我没有,但这会影响到我使用created_时的所有地方吗?是的,我几乎在我所有的项目中都使用它来将日期转换为Jalali日期。我强烈建议使用它。我只想影响created_at的这一个实例,而不影响其他实例。我仍然可以使用访问器进行访问吗?您可以为所需的每个模型创建访问器。试试看。您只需要在模型中添加3-5行,所以请尝试。您尝试过“访问器”吗@我没有,但这会影响到我使用created_时的所有地方吗?是的,我几乎在我所有的项目中都使用它来将日期转换为Jalali日期。我强烈建议使用它。我只想影响created_at的这一个实例,而不影响其他实例。我仍然可以使用访问器进行访问吗?您可以为所需的每个模型创建访问器。试试看。您只需要在模型中添加3-5行,因此请尝试。