Laravelの実践的な練習としてベストプラクティスと言われるものを見つけ、そこでは以下の様に記載されていたのですが、いくつか疑問点があり、今回質問させていただきました。
記載されていた内容で、行っていたこととしては、Controllerに記載されていたDBに関するロジックに関しては、Modelに記述しているという認識です。
ただ、それに関して以下の点が不明点です。
DBに関連するすべてのロジックはEloquentモデルに入れるか (〜省略〜) レポジトリークラスにいれます。
- まず、なぜ下記ではBadに値するのでしょうか?
- また、その場合全てのDB操作をModelで行ってはあまりControllerの意味がなくなってしまうといった点や、Modelが肥大化してしまうのではないでしょうか?
上記を踏まえた上でどの様な判断を行い、Modelにコードの記載を行うことがあるのか、またその判断基準や全てのアクションをModelに記載してしまってはダメだと思うので、どのアクションをModeに記載するのか、共通化したものとして捉えていいのかが質問点となります。
長くなってしまい、あまりうまくまとめることができなかったのですが、以上を踏まえ、ご回答
していただけると幸いです。
以下は記載されていた内容です。
ファットモデル、スキニーコントローラ
DBに関連するすべてのロジックはEloquentモデルに入れるか、もしクエリビルダもしくは生のSQLクエリを使用する場合はレポジトリークラスに入れます。
Bad:
PHP
1public function index() 2{ 3 $clients = Client::verified() 4 ->with(['orders' => function ($q) { 5 $q->where('created_at', '>', Carbon::today()->subWeek()); 6 }]) 7 ->get(); 8 9 return view('index', ['clients' => $clients]); 10}
Good:
PHP
1public function index() 2{ 3 return view('index', ['clients' => $this->client->getWithNewOrders()]); 4} 5 6class Client extends Model 7{ 8 public function getWithNewOrders() 9 { 10 return $this->verified() 11 ->with(['orders' => function ($q) { 12 $q->where('created_at', '>', Carbon::today()->subWeek()); 13 }]) 14 ->get(); 15 } 16}
回答3件
あなたの回答
tips
プレビュー