따라서 합리적으로 자주 발생하는 상황은 모델이 다음 중 하나를 시작하는 상황입니다.
- 수많은 방법으로 몬스터로 성장
또는
- 백만 가지 방법이 필요하지 않을 정도로 유연하도록 SQL 조각을 전달할 수 있습니다.
예를 들어 "위젯"모델이 있다고 가정합니다. 우리는 몇 가지 기본 방법으로 시작합니다.
- get ($ id)
- 삽입 ($ record)
- 업데이트 ($ 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")
5000 만 개의 다른보다 구체적인 방법 대신에 한 가지 방법을 사용하는 것이 매력적입니다. 그러나 때때로 컨트롤러에 기본 SQL 항목을 넣는 것은 "잘못된"느낌입니다.
이와 같은 상황을 처리하는 "올바른"방법이 있습니까? 그런 쿼리를 일반-> query () 메소드에 채우는 것이 허용되는 것처럼 보입니까?
더 나은 전략이 있습니까?