Jadi situasi yang sering saya temui adalah situasi di mana model saya mulai:
- Tumbuh menjadi monster dengan berton-ton metode
ATAU
- Memungkinkan Anda mengirimkan potongan-potongan SQL kepada mereka, sehingga mereka cukup fleksibel untuk tidak memerlukan jutaan metode berbeda
Misalnya, kita memiliki model "widget". Kami mulai dengan beberapa metode dasar:
- dapatkan ($ id)
- masukkan ($ record)
- perbarui ($ id, $ record)
- hapus ($ id)
- getList () // dapatkan daftar Widget
Semua baik-baik saja dan keren, tetapi kemudian kita perlu pelaporan:
- listCreatedBetween ($ start_date, $ end_date)
- listPurchasedBetween ($ start_date, $ end_date)
- listOfPending ()
Dan kemudian pelaporan mulai menjadi rumit:
- listPendingCreatedBetween ($ start_date, $ end_date)
- listForCustomer ($ customer_id)
- listPendingCreatedBetweenForCustomer ($ customer_id, $ start_date, $ end_date)
Anda dapat melihat di mana ini berkembang ... pada akhirnya kami memiliki begitu banyak persyaratan kueri khusus sehingga saya perlu menerapkan berton-ton metode, atau semacam objek "kueri" yang dapat saya sampaikan ke satu -> kueri (kueri) metode $ query) ...
... atau cukup gigit peluru, dan mulailah melakukan sesuatu seperti ini:
- list = MyModel-> query ("start_date> X AND end_date <Y AND pending = 1 AND customer_id = Z")
Ada daya tarik tertentu untuk hanya memiliki satu metode seperti itu daripada 50 juta metode lain yang lebih spesifik ... tapi kadang-kadang terasa "salah" untuk memasukkan setumpuk apa yang pada dasarnya SQL ke dalam pengontrol.
Apakah ada cara "benar" untuk menangani situasi seperti ini? Apakah dapat diterima untuk memasukkan pertanyaan seperti itu ke dalam metode generik -> kueri ()?
Apakah ada strategi yang lebih baik?