@runprogr

Как правильно привязать пост к топику?

Только начинаю свой путь в Laravel, для отработки решил сделать простенький форум.

Есть сущность топик, у которой связь hasMany Post
Есть сущность пост, у которой связь belongsTo Topic

Когда мы создаем Топик, то сразу создаем и пост, который будет стартовым. И который всегда будет первым в теме и который нельзя удалять.

Пока нашел только два варианта -
1) прописать в модель топик столбец post_id, в котором будет номер привязанного поста. Тогда надо будет делать два запроса в БД, вытащить Топик и привязанный Пост, а потом еще запрос на все остальные посты. Но здесь проявляется проблема с пагинацией, потому что первый пост не учитывается и на первой странице постов будет на один больше, чем на остальных
2) В модели Post добавить столбец main, в котором проставлять 0 или 1. И сначала форичем перебирать массив с условием выводить только посты, где main==1, а потом еще раз форичем перебирать массив с условием main=0.

Не уверен что хоть один из этих вариантов является правильным. Как лучше сделать ?
  • Вопрос задан
  • 104 просмотра
Решения вопроса 1
glaphire
@glaphire
PHP developer
Первый вариант не годится.
Второй случай - не совсем понятно, зачем вам два форыча - первые посты вы захотите вывести при отображении списка топиков (как я понимаю), второй раз выведите все посты, связанные с топиком, но тут main 1|0 уже не играет роли. Т.е. на одну задачу вам нужно один раз вытягивать посты, просто по разным критериям.
Основной пост для топика можно определять по дате создания (первый при сортировке по дате) и кешировать (чтобы не расходовать ресурсы на поиск первого поста каждый раз), чтобы не использовать доп. колонку для флага.
На уровне бизнес-логики (php-кода) надо запретить удалять первый пост.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы