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

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


person user3569641    schedule 07.01.2015    source источник


Ответы (2)


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

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

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

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

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

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

Пытаться:

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

до return

person egig    schedule 07.01.2015
comment
Спасибо. Это работает. Мне просто нужно удалить & в вашем $post. Опечатка. - person user3569641; 07.01.2015