我有两个雄辩的模型Threads
和Comments
,每个帖子都有很多评论。
在列出线程时,我需要通过created_at降序对线程进行排序。所以,我需要使用created at
中的Comments
对线程进行排序。
显然点符号在订购方式上没有帮助,我如何正确订购线程?
$Threads= Thread::all()->orderBy("comment.created_at","desc")
答案 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');
}