Как правильно получить составные данные из базы и сложить их в одну сущность?
Немножко не ответДля класса PostsModel:
Автор Поста является потомком Поста.
Пост для автора - Родитель.
Пост для даты поста - Родитель.
*Тут была реплика про уровень комьюнити тостера, и даже "Кураторов Тега", которые позволяют себе нести вышепроцитированную чушь, но я решил её опустить, т.к. разумный человек и так поймёт со временем*
Совет - развивайте критическое мышление и фильтруйте информацию, не верьте всему в интернете, даже если у этого 100500 плюсов на каком-нибудь ресурсе типа Хабра/SO/Medium/Тостер и т.п.
Алексей Коновалов,нам нужна одна точка получения данных.
Нам не нужна "единая точка получения данных".  У вас есть ваши модели(сущности, доменные модели) - это компонент вашей системы отвечающий за часть бизнес-логики.
 Так же у вас есть представления данных. Представлений данных может быть множество. Не нужно реиспользовать одну и ту же модельку для логики/записи и для чтения(представления, UI).
Выбрали данные из БД(raw SQL/Eloquent/DQL смапленный на DTO, что угодно)
->заполнили ими структуру которая сформирована исходя из нужд клиентского модуля(Frontend`а вашего),
-> привели к нужному формату(json etc.) и отдали на фронтендОн работает с базой данных и делает все, что связано с постами. И тут как раз проблема.
Очень хорошо что вы подметили что это проблема, серьёзно. Именно по этому "Active Record" - антипаттерн.
Некоторые, к большому сожалению, годами к этому не могут придти, того больше - отстаивают каждое архитектурное решение какого-нибудь Laravel не с позиции инженера, а с позиции религиозного фанатика.
Модели для записи ничего про HTTP, Request и представления знать не должны. Модели на чтение по сути просто структуры данных.
Для класса PostsModel:
Автор Поста является потомком Поста.
Пост для автора - Родитель.
Пост для даты поста - Родитель.
и т.д.