Использование Carbon для запросов Laravel

Как я могу использовать углерод для вывода created_at удобочитаемые запросы, такие как Facebook 1 min ago на его сообщения. Проблема в том, что я всегда возвращаю результаты запроса напрямую в браузер. Как я могу интегрировать это так вместо 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;

Затем он вернет JSON-формат всех сообщений.

2 ответа

Решение

Я рекомендую вам использовать модель Eloquent и функции, которые поставляются с ней:

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

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

Этот атрибут accessor возвращает форматированную дату и потому что он зарегистрирован в $appends атрибут будет включен для преобразования массива /JSON.

И ваш запрос будет выглядеть примерно так же:

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

Пытаться:

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

до return

Другие вопросы по тегам