Laravel通过hasmany关系订购

时间:2015-02-20 17:34:48

标签: php mysql laravel eloquent relationship

我有两个雄辩的模型ThreadsComments,每个帖子都有很多评论。

在列出线程时,我需要通过created_at降序对线程进行排序。所以,我需要使用created at中的Comments对线程进行排序。

显然点符号在订购方式上没有帮助,我如何正确订购线程?

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

2 个答案:

答案 0 :(得分:2)

了解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();

答案 1 :(得分:0)

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');
}