Таким образом, ситуация, с которой я сталкиваюсь достаточно часто, - это ситуация, когда мои модели начинают либо:
- Вырасти в монстров с тоннами и тоннами методов
ИЛИ
- Позволяют вам передавать кусочки SQL им, чтобы они были достаточно гибкими и не требовали миллиона различных методов.
Например, скажем, у нас есть модель «виджет». Мы начнем с некоторых основных методов:
- получить ($ ID)
- вставить ($ запись)
- обновление ($ id, $ record)
- удаление ($ ID)
- getList () // получить список виджетов
Это все хорошо и здорово, но тогда нам нужно немного отчетности:
- listCreatedBetween ($ start_date, $ end_date)
- listPurchasedBetween ($ start_date, $ end_date)
- listOfPending ()
И тогда отчетность начинает усложняться:
- listPendingCreatedBetween ($ start_date, $ end_date)
- listForCustomer ($ customer_id)
- listPendingCreatedBetweenForCustomer ($ customer_id, $ start_date, $ end_date)
Вы можете видеть, где это растет ... в конце концов, у нас так много особых требований к запросу, что мне нужно либо реализовать тонны и тонны методов, либо какой-то объект "запроса", который я могу передать в один запрос -> запрос ( метод $ query) ...
... или просто прикусить пулю и начать делать что-то вроде этого:
- list = MyModel-> query ("start_date> X AND end_date <Y AND pending = 1 AND customer_id = Z")
Есть определенный призыв просто иметь один такой метод вместо 50 миллионов других более специфических методов ... но иногда кажется "неправильным" вставлять кучу того, что в основном является SQL, в контроллер.
Есть ли «правильный» способ справиться с такими ситуациями? Кажется ли приемлемым вставлять подобные запросы в общий метод -> query ()?
Есть ли лучшие стратегии?