使用 Carbon 进行 Laravel 查询

Using Carbon for Laravel queries

我如何使用 Carbon 在其帖子上输出 created_at 人类可读的查询,例如 Facebook 的 1 min ago。问题是我总是return直接在浏览器中输出查询结果。我怎样才能整合它,而不是 2015-07-01 12:32:43 而是 1 min ago 或其他人类可读且漂亮的东西。

在我的控制器中:

    $posts = DB::table('posts')
                ->where('author_id', '=', $id)
                ->where('created_at', '<', $date)
                ->orderBy('created_at', 'desc')
                ->paginate(10);

    return $posts;

然后它将 return 所有帖子的 json 格式。

尝试:

foreach ($posts as &$post) {
   $post->created_at = Carbon::parse($post->created_at)->diffForHumans();
}

之前 return

我建议您使用 Eloquent 模型及其附带的功能:

class Post extends Eloquent {
    protected $appends = array('created_at_for_humans');

    public function getCreatedAtForHumansAttribute(){
        return Carbon::parse($this->attributes['created_at'])->diffForHumans();
    }
}

attribute accessor returns 格式化日期,因为它已在 $appends 中注册,所以该属性将包含在 array/JSON 转换中。

您的查询看起来几乎相同:

$posts = Post::where('author_id', '=', $id)
             ->where('created_at', '<', $date)
             ->orderBy('created_at', 'desc')
             ->paginate(10);