Как заказать сообщения по датам в Laravel - PullRequest
0 голосов
/ 12 декабря 2018

Я создаю раздел чата в моем приложении с помощью vueJs и laravel backend.Я хочу получить мои сообщения, сгруппированные по дням.Поэтому, когда отображаются сообщения, я хочу, чтобы они выглядели примерно так.

  `Today
  **All messages sent and received today, ordered by time**
   Yesterday
   **Yesterday's messages**
   9/12/2018
  **Messages for that day**

В моей модели чата я написал для этого аксессор вот так:

public function getMessagesAttribute(){ return $this ->groupBy(function($q){ return $q->created_at->format('Y-m-d'); });

Однако это не дает ничего отличного от того, что я получилкогда я использую orderBy («create_at», «ASC») в контроллере.Я буду признателен за любую помощь / руководство для достижения того, чего я хочу, пожалуйста.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

А как насчет

$today = \Carbon\Carbon::now()->format('Y-m-d');
$yesterday = \Carbon\Carbon::yesterday()->format('Y-m-d');
$any_day = \Carbon\Carbon::createFromFormat('d/m/Y', '9/12/2018')->format('Y-m-d'); //used your example date
$messages_today = Message::where('created_at', 'like', "{$today}%")->orderBy('created_at', 'desc')->get();
$messages_yesterday = Message::where('created_at', 'like', "{$yesterday}%")->orderBy('created_at', 'desc')->get();
$messages_any_day = Message::where('created_at', 'like', "{$any_day}%")->orderBy('created_at', 'desc')->get();

Требуется некоторая настройка в соответствии с вашими потребностями.Но это должно помочь вам.

0 голосов
/ 12 декабря 2018

Вы можете передать результаты своей функции в цикл, который начинается с первой даты, устанавливает дату как переменную, затем сравнивает ее со следующей датой, которая, если следующая дата имеет меньшее значение, ей предшествуетс полем заголовка для группировки.

$date=null;
$next_date=null;
while($this) {
  $date = $this->created_at;
  if($next_date != null && $next_date<$date) {
    *put your group title here*;
    *put date/message here*;
  } else {
    *put date/message here*;
  }

  $next_date=$date;
}

Может быть, построить из него массив или что-то в этом роде.

...