È importante capire come funziona il caricamento ansioso di Laravel. Se desideriamo caricare il tuo esempio, Laravel prima recupera tutti i thread. Quindi recupera tutti i commenti e li aggiunge all'oggetto thread. Poiché vengono utilizzate query separate, non è possibile ordinare i thread in base ai commenti.
Devi invece usare un join. Nota che sto indovinando i nomi delle tue colonne/tabelle in questo esempio.
$threads = Thread::leftJoin('comment', 'comment.thread_id', '=', 'thread.id')
->with('comments')
->orderBy('comment.created_at', 'desc')
->get();
Poiché ti stai unendo, potresti dover specificare manualmente le colonne per selezionare i nomi delle colonne delle tabelle.
$threads = Thread::select('thread.*')->leftJoin('comment', 'comment.thread_id', '=', 'thread.id')
->with('comments')
->orderBy('comment.created_at', 'desc')
->get();