繁体   English   中英

Laravel通过hasmany关系排序

[英]Laravel order by hasmany relationship

我有两个雄辩的模型ThreadsComments ,每个线程都有很多注释。

在列出线程时,我需要按created_at降序对线程进行排序。 因此,我需要使用在Comments created at对线程进行排序。

显然,点号对这种方式的排序没有帮助,我如何正确排序线程?

$Threads= Thread::all()->orderBy("comment.created_at","desc")

了解Laravel的热切加载方式是很重要的。 如果我们渴望加载您的示例,那么Laravel首先会获取所有线程。 然后,它获取所有注释并将其添加到线程对象。 由于使用了单独的查询,因此无法通过注释对线程进行排序。

您需要使用联接。 请注意,在此示例中,我猜测的是您的表/列名称。

$threads = Thread::leftJoin('comment', 'comment.thread_id', '=', 'thread.id')
    ->with('comments')
    ->orderBy('comment.created_at', 'desc')
    ->get();

由于要加入,因此可能需要手动指定列以选择表的列名。

$threads = Thread::select('thread.*')->leftJoin('comment', 'comment.thread_id', '=', 'thread.id')
    ->with('comments')
    ->orderBy('comment.created_at', 'desc')
    ->get();
public function profiles()
{
    return $this->hasMany('Models\v1\Admin\UserProfile', 'user_id')->leftJoin('user_field', 'user_profile.user_field_id', '=', 'user_field.id')->orderBy('order');
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM