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
是第一位。