Вариантов на самом деле не много:
- Создать базовую модель BaseModel (унаследованную от Eloquent) и в ней переопределить метод where добавив сохранение $query. И от BaseModel унаследовать все модели которым нужен данный функционал.
- Тоже самое что выше, только сделать Repository и добавить в него тот же функционал.
- Тоже самое что выше, только создать отдельный trait
Непонятна связь между
SearchQuery и
Chapter/Section. Если есть отдельная таблица
SearchQuery, то зачем делать поиск по
Chapter/Section?
Так же непонятно когда нужно создавать новую запись, при каких условиях.
Сделать отдельный сервис, который будет рулить всеми поисковыми запросами, и соответсвенно отвечать за CRUD по $query.