通过关系的“关系”列订购

时间:2019-04-10 09:24:32

标签: laravel eloquent

我在这里面临一个问题。我有3个表格的帖子,主题和评论。主题包含评论,并附加到帖子中。因此,帖子和线程之间存在关系,而线程和注释之间存在关系。我需要的是按最新顺序对帖子进行排序,如果帖子具有包含注释的线程,则使用注释created_at;否则,如果帖子没有附加线程,则使用在at创建的帖子。所以我有点需要通过是否存在thread.comments.created_at else post.created_at

来排序

这可能吗?

1 个答案:

答案 0 :(得分:0)

我设法做到了

$posts = Post::leftJoin('threads', function($join) {
                $join->on('posts.id', '=', 'threads.post_id');
            })
            ->leftJoin('messages', function($join) {
                $join->on('threads.id', '=', 'messages.thread_id')
                    ->where('messages.id', '=', DB::raw('(select max(messages.id) from messages)'));

            })
            ->orderByRaw('coalesce(messages.created_at, posts.created_at) DESC')
            ->get();