Entonces, una situación con la que me encuentro razonablemente a menudo es una en la que mis modelos comienzan a:
- Conviértete en monstruos con toneladas y toneladas de métodos.
O
- Permitirle pasar fragmentos de SQL para que sean lo suficientemente flexibles como para no requerir un millón de métodos diferentes
Por ejemplo, supongamos que tenemos un modelo de "widget". Comenzamos con algunos métodos básicos:
- obtener ($ id)
- insertar ($ registro)
- actualización ($ id, $ record)
- eliminar ($ id)
- getList () // obtiene una lista de widgets
Eso está muy bien, pero luego necesitamos algunos informes:
- listCreatedBetween ($ fecha_inicio, $ fecha_final)
- listPurchasedBetween ($ fecha_inicio, $ fecha_final)
- listOfPending ()
Y luego los informes comienzan a complicarse:
- listPendingCreatedBetween ($ fecha_inicio, $ fecha_final)
- listForCustomer ($ customer_id)
- listPendingCreatedBetweenForCustomer ($ customer_id, $ start_date, $ end_date)
Puedes ver dónde está creciendo ... eventualmente tenemos tantos requisitos de consulta específicos que necesito implementar toneladas y toneladas de métodos, o algún tipo de objeto de "consulta" que puedo pasar a una sola consulta> consulta método $ query) ...
... o simplemente muerde la bala y comienza a hacer algo como esto:
- list = MyModel-> query ("fecha_inicio> X Y fecha_final <Y Y pendiente = 1 Y cliente_id = Z")
Hay un cierto atractivo para tener un método como ese en lugar de 50 millones de otros métodos más específicos ... pero a veces se siente "mal" meter un montón de lo que es básicamente SQL en el controlador.
¿Hay una forma "correcta" de manejar situaciones como esta? ¿Parece aceptable incluir consultas como esa en un método genérico -> query ()?
¿Hay mejores estrategias?