この種のリファクタリングを行うときに覚えておくべきことがあります...
通常、モデルにはModel->getSomethingAndSomethingElse関数があります。これらの関数は公開されており、コントローラーからの複雑な(または任意の)検索呼び出しを行う代わりに呼び出されることを意図しています。
次に、私が通常行うことは、モデル内にプライベート関数の小さなコレクションを構築することです。あなたの場合、私は次のようなものを持っているかもしれません...
Student-> getStudentAssigmentsWithQuestions
次に、いくつかのプライベート関数を呼び出します。
Student->getStudentはStudent->joinStudentAssignmentを呼び出し、次にAssignment->joinAssignmentQuestionなどを呼び出します。
マークダウンがそれらのために物事を太字にしたいので、二重アンダースコアプレフィックスは削除されました。php5を使用している場合、「private」または「proteced」キーワードを使用している限り、アンダースコアは重要ではありません。
基本的に、私はpublicメソッドを、モデル内の非常に特殊なクエリ構築または関連付け構築プライベート関数のグループのコンテナとして使用します。これにより、複雑なデータが返されるAPIを使用できますが、クエリまたは結果セット(データのタイプ、関連する関係、またはクエリの複雑さに応じて)を小さな断片から構築します。これは、理想的には、 1つのパブリック関数呼び出し。