如何在 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') 时得到的结果没有什么不同。我将不胜感激任何帮助/指导以实现我想要的。
【问题讨论】:
你能在设置 Vuedata
的地方添加一些代码吗?你有没有使用任何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 中按日期排序消息的主要内容,如果未能解决你的问题,请参考以下文章