Es importante comprender cómo funciona la carga ansiosa de Laravel. Si deseamos cargar su ejemplo, Laravel primero busca todos los hilos. Luego obtiene todos los comentarios y los agrega al objeto de subprocesos. Dado que se utilizan consultas separadas, no es posible ordenar hilos por comentarios.
En su lugar, debe usar una combinación. Tenga en cuenta que estoy adivinando los nombres de su tabla/columna en este ejemplo.
$threads = Thread::leftJoin('comment', 'comment.thread_id', '=', 'thread.id')
->with('comments')
->orderBy('comment.created_at', 'desc')
->get();
Como se está uniendo, es posible que deba especificar columnas manualmente para seleccionar los nombres de las columnas de sus tablas.
$threads = Thread::select('thread.*')->leftJoin('comment', 'comment.thread_id', '=', 'thread.id')
->with('comments')
->orderBy('comment.created_at', 'desc')
->get();