Тож ситуація, з якою я стикаюся досить часто, - це така ситуація, коли мої моделі починають чинити:
- Виростають у монстрів тоннами і тонами методів
АБО
- Дозволяють передавати їм шматочки SQL, щоб вони були досить гнучкими, щоб не потрібно мільйон різних методів
Наприклад, скажімо, у нас є модель "віджет". Почнемо з деяких основних методів:
- отримати ($ ідентифікатор)
- вставка ($ запис)
- оновлення ($ id, $ запис)
- видалити ($ id)
- getList () // отримати список віджетів
Це все чудово і безглуздо, але тоді нам потрібна деяка звітність:
- listCreateBet between ($ start_date, $ end_date)
- list PurchasedBet between ($ start_date, $ end_date)
- listOfPending ()
І тоді звіт починає набирати складності:
- listPendingCreateBet Between ($ start_date, $ end_date)
- listForCustomer ($ customer_id)
- listPendingCreateBet BetweenForCustomer ($ customer_id, $ start_date, $ end_date)
Ви можете бачити, де це зростає ... врешті-решт у нас є стільки специфічних вимог до запитів, що мені або потрібно реалізувати тонни і тонни методів, або якийсь об’єкт "запиту", який я можу передати на один запит -> (запит $ запит) метод ...
... або просто кусайте кулю і починайте робити щось подібне:
- list = MyModel-> query ("start_date> X AND end_date <Y AND pending = 1 AND customer_id = Z")
Існує певний заклик просто мати один подібний метод замість 50 мільйонів інших більш конкретних методів ... але відчуває себе "неправильним" іноді вкладати купу контролера, що в основному є SQL.
Чи існує "правильний" спосіб вирішення подібних ситуацій? Чи здається прийнятним введення таких запитів у загальний метод -> query ()?
Чи є кращі стратегії?