ох Вы с названиями и ответственностью классов намудрили, давайте по порядку
Есть модель ModelPosts, в которой мы получаем все из базы данных.
Это не модель. Модель - это набор классов реализовывающих бизнес-логику. У Вас же этот класс реализовывает взаимодействие с базой данных - а это как бы вообще не бизнес-логика. По сути дела класс ModelPosts у Вас выступает в качестве
репозитория, который только обеспечивает взаимодействие с базой данных.
Репозиторий - это уровень доступа к данным.Есть объект Post, в котором обычно помещаются данные о посте, после их получения из БД (но у себя в голове никак не могу его определить куда-то при добавлении поста, получается этот объект никак не участвует в добавлении)
А этот класс по сути дела обычная сущность хранящая в себе данные. Вот этот то класс и должен быть моделью (или ее частью) т.е. не только содержать данные но и реализовывать какую-нибудь бизнес-логику.
Модель это уровень бизнес-логики.
Добавление поста - это что? в общем случае это просто выполнение определенного запроса к базе данных. А что отвечает за взаимодействие с базой данных? Уровень доступа к данным, в нашем случае это класс ModelPosts (вообще-то не удачное название). Соответственно в нем и должна быть реализация добавления поста в базу данных.
Что касается валидации - реализация механизма валидации должна содержаться в отдельном классе (или классах). Сама валидация может происходить либо в контроллере, либо в модели