Laravel 如何在集合中首先获得固定线程
我试图在一个集合中获得固定的线程,在这个集合中我还可以获得最新的回复线程。我在任何地方都找不到任何东西,也找不出答案,所以我来问你们所有人。请传授你的智慧。这是我到目前为止所拥有的Laravel 如何在集合中首先获得固定线程,laravel,Laravel,我试图在一个集合中获得固定的线程,在这个集合中我还可以获得最新的回复线程。我在任何地方都找不到任何东西,也找不出答案,所以我来问你们所有人。请传授你的智慧。这是我到目前为止所拥有的 $threads = Thread::all()->sortByDesc(function($thread) { $replies = $thread->replies->sortByDesc('created_at'); $newes
$threads = Thread::all()->sortByDesc(function($thread) {
$replies = $thread->replies->sortByDesc('created_at');
$newestResponse = Carbon::minValue();
if (!empty($replies->toArray())) {
$newestResponse = $newestResponse->max($replies->first()->created_at);
}
return $newestResponse->max($thread->created_at);
});
我想我理解你只想要每个线程的最新回复。基于此,我将专门为此任务创建一个关系 Thread.php
//添加新的有说服力的关系
公共职能
{
返回$this->hasOne(Reply::class)->latest();
}
然后使用来执行查询
$threads=Thread::with('latestReply')
->orderBy('pinted','desc')
->orderBy('created_at','desc')
->get();
一般来说,最好在数据库级别执行查询。检索
all()
结果并将其作为一个集合进行处理通常要慢得多,应该避免这种情况。当有人回复线程时,线程会被放在最上面,这就是现在代码的功能——我想要的是将固定线程置于整个进程之上。(我很欣赏你的见解)你如何确定一根线是否被钉住了?是否有一个数据库字段(例如,是固定的
)?因此您想要一个线程的所有回复,但首先固定回复?其余的按时间降序排列?我希望所有的线程都有最新的回复,但不管怎样,锁定的线程优先。请参阅我的更新。这只是一个小改动,但现在有两个orderBy()
子句。按pin状态订购,然后按创建日期订购。或按您喜欢的方式订购,只要pinted
是第一位。