Только начинаю свой путь в Laravel, для отработки решил сделать простенький форум.
Есть сущность топик, у которой связь hasMany Post
Есть сущность пост, у которой связь belongsTo Topic
Когда мы создаем Топик, то сразу создаем и пост, который будет стартовым. И который всегда будет первым в теме и который нельзя удалять.
Пока нашел только два варианта -
1) прописать в модель топик столбец post_id, в котором будет номер привязанного поста. Тогда надо будет делать два запроса в БД, вытащить Топик и привязанный Пост, а потом еще запрос на все остальные посты. Но здесь проявляется проблема с пагинацией, потому что первый пост не учитывается и на первой странице постов будет на один больше, чем на остальных
2) В модели Post добавить столбец main, в котором проставлять 0 или 1. И сначала форичем перебирать массив с условием выводить только посты, где main==1, а потом еще раз форичем перебирать массив с условием main=0.
Не уверен что хоть один из этих вариантов является правильным. Как лучше сделать ?
Первый вариант не годится.
Второй случай - не совсем понятно, зачем вам два форыча - первые посты вы захотите вывести при отображении списка топиков (как я понимаю), второй раз выведите все посты, связанные с топиком, но тут main 1|0 уже не играет роли. Т.е. на одну задачу вам нужно один раз вытягивать посты, просто по разным критериям.
Основной пост для топика можно определять по дате создания (первый при сортировке по дате) и кешировать (чтобы не расходовать ресурсы на поиск первого поста каждый раз), чтобы не использовать доп. колонку для флага.
На уровне бизнес-логики (php-кода) надо запретить удалять первый пост.
Два форича я думал использовать для дополнительной проверки, чтобы если вдруг главный пост окажется в БД ниже, чем неглавный, чтобы все равно вывелся первым именно он. Хотя да, это уже излишне, потому что все равно главный пост всегда будет самым первым при сортировке как по айди, так и по времени создания.
Спасибо, с этим понял, если не сложно, можете дать любую ссылку, где можно доступно узнать что такое кеширование и как им пользоваться ?
runprogr, да, конечно)
Тут хорошо рассказана суть (куски кода - это только примеры, к технологии не привязаны) - ссылка .
Тут статьи, как этим пользоваться в laravel - eng, rus (могут быть небольшие отличия из-за разных версий фреймворка, но для вашей версии все должно быть в английской доке)