learn eloquent query.
$posts = Post::leftJoin('comments', 'comments.post_id', '=', 'posts.id')
->selectRaw(
'posts.*,
count(comments.id) as comments_count'
)
->groupBy('posts.id')
->orderBy('comments_count', 'desc')
->get();