Laravel5.2 ControllerとModel、どっちにどこまで処理を書くのが正解なのか
Fat Controllerがいけないとかなんとかを聞いた事がある。
たしかに、改修案件なんかでコントローラー開けた時に、そこにゴリゴリ処理が書いてあったら萎える。 まぁ、事の起こりはテストを書けない、書きづらいって事かららしいので、僕しか見ない&テストコードもろくに書かないプロジェクトなんだから好きにすればいいのだけれども。
ただ、Laravel5.2 において、Model を
php artisan make:model User
とかってジェネレートすると
<?php namespace App; use Illuminate\Database\Eloquent\Model; class User extends Model { // }
だけの空っぽのクラスができる。 Usersテーブルのマイグレーションがあれば、なんかよしなにしてくれてControllerから
$users = User::all();
だけで SELECT * FROM user が実行できてしまうのはすごいし便利ではある。 だが、例えば取ってきたデータをもとにごにょごにょしたり、キャッシュにあったらキャッシュから、なかったら読むみたいなんも Controllerに書くって事なんだろうか。
こういったのはModelに書いて、あくまでControllerはそれらを取りまとめてViewに渡す、ってイメージが僕の中でのMVCなのだが…。
Modelに書けない事はもちろんなくて、
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Cache; class User extends Model { // public function test() { if (!Cache::has('user_info')) { $result = Cache::remember('user_info', 10, function() { return $this->all()->toArray(); }); } else { $result = Cache::get('user_info'); } return $result; } }
的なものから
$userModel = new User();
$user = $userModel->test();
でOK。
どうせ自分しか見ないんだから自分の好きなように書けばいいのかね。最初に言ってたな。
※どうせModelに書くなら、ORMするよりネイティブSQL書いた方が早い(みたい)