したがって、私がかなり頻繁に遭遇する状況は、私のモデルが次のいずれかを開始する状況です。
- たくさんの方法でモンスターに成長する
または
- SQLの一部をそれらに渡すことができるため、数百万の異なるメソッドを必要としないほど柔軟です
たとえば、「ウィジェット」モデルがあるとします。いくつかの基本的な方法から始めます。
- get($ id)
- insert($ record)
- update($ 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(query $ query)メソッド...
...または単に弾丸を噛んで、次のようなことを始めてください:
- list = MyModel-> query( "start_date> X AND end_date <Y AND pending = 1 AND customer_id = Z")
5,000万の他のより具体的なメソッドの代わりに、そのようなメソッドを1つだけ持つことには特定の魅力があります...
このような状況を処理する「正しい」方法はありますか?そのようなクエリをジェネリック-> query()メソッドに詰め込むことは受け入れられるように思えますか?
より良い戦略はありますか?