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