Используйте функцию usort https://www.php.net/manual/en/function.usort.php
Напишите обратный вызов, сравнивая вложенный атрибут created_at
Также, если у вас есть коллекция laravel, вы можете использовать
$collection = $collection->sort(function ($a, $b) {
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
});
Или, если вы используете красноречивый, вы можете заказать его у SQL
Message::where(...)->orderBy('created_at', 'DESC')->paginate(20)
У пользователя
$user->with(['messages' => function ($query) {
$query->orderBy('created_at', 'DESC');
}]);