如何在 Laravel 中按日期排序消息

Posted

技术标签:

【中文标题】如何在 Laravel 中按日期排序消息【英文标题】:How to order messages by dates in Laravel 【发布时间】:2019-05-12 23:02:32 【问题描述】:

我正在使用 vueJs 和 laravel 后端构建我的应用程序的聊天部分。我想获取按天分组的消息。所以当消息显示时,我希望它们看起来像这样。

  `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('created_at', 'ASC') 时得到的结果没有什么不同。我将不胜感激任何帮助/指导以实现我想要的。

【问题讨论】:

你能在设置 Vue data 的地方添加一些代码吗?你有没有使用任何computed 属性?不能很清楚地看到你尝试了什么。 【参考方案1】:

怎么样

$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();

它需要根据您的需要进行一些调整。但这应该对你有用。

【讨论】:

【参考方案2】:

您可以将函数的结果输入到从第一个日期开始的循环中,将日期设置为变量,然后将其与下一个日期进行比较,如果下一个日期的值较小,则它会优先带有标题字段以导致分组。

$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;

也许用它构建一个数组,或者类似的东西。

【讨论】:

以上是关于如何在 Laravel 中按日期排序消息的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Laravel 中按字母顺序对记录进行排序

如何在 Laravel 5.1 中按多列对 Illuminate Collection 进行排序?

如何在 Laravel 的嵌套 2 级关系中按列排序?

如何在 SOLR 中按日期排序?

如何在飞镖/颤振中按日期对列表进行排序/排序?

如何在 MongoDB 中按日期对集合进行排序?