2015-01-07 6 views
1

Как я могу использовать Carbon для вывода created_at человекообразных запросов, таких как Facebook's 1 min ago на его сообщениях. Проблема в том, что я всегда возвращаю результаты запроса для вывода в браузере напрямую. Как я могу интегрировать его так, а вместо 2015-07-01 12:32:43 это было бы 1 min ago или другое, что было бы человеком читаемым и приятным.Использование Carbon для запросов Laravel

В моем контроллере:

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

    return $posts; 

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

ответ

2

Я рекомендую вам использовать Красноречивый модель и особенности, которые приходят с ней:

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

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

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

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

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

Try:

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

перед тем return

+0

Спасибо. Работает. Мне просто нужно удалить '&' в вашей '$ post'. Опечатка. – user3569641

Смежные вопросы