現在、Laravelの使用経験が半年を越えた学生エンジニアです。
Laraelには非常に便利な「Eloquent ORM」という非常に便利な概念が存在します。
主に以下のような解釈ができると思います。
- SQLの簡略化
- データベースへのインターフェース
ざっくりとご説明したいと思います。
「Eloquent ORM」と「Model」
LaravelはMVCモデルと呼ばれています。
Model View Controllerの略です。
- Modelを用いてテーブルからデータ取得
- Controllerを用いてデータを処理
- Viewで処理されたデータを表示
上記の流れで運用されるためです。(厳密にはもっとたくさんありますが!)
上記の1の工程がModelですが、
Eloquent ORM と Modelはほぼ同義と考えて構いません
では実際に効率的に書いていきましょう!
なるべく不要な値を取得しない
$attendances = Attendance::all();
まず、Attendanceモデルですが、私が勤怠管理のwebアプリケーションを作成した際のモデル名です。
attendancesテーブルにある全ての値を取得するという処理です。
全てが必要ならば問題ありませんが、「全部取得しておけば、問題ないだろう」という理由ならば、このような記述はやめましょう!
- パフォーマンスが悪い
- イケてないコードになる
どうせならイケてるコード書きましょうよ!
イケてるEloquentに便利なメソッド
withメソッド+カラム指定
withメソッドはリレーションが組まれた別テーブルから紐づいているフィールドを取得するためのメソッドです。紐づいているフィールド全体を取得しますが、不要なカラムを取得していることが多くあると思います。
そのような時にカラムを指定する方法が以下の書き方です。
$reserves = Reserve::where('user_id',Auth::id())->with('gourmets:id,name')->get();
以前制作した飲食店一覧のwebアプリケーションでreservesテーブルという予約に関するデータを保存するテーブルから必要なデータを取得する処理です。
where句 :「user_idカラムがログイン中のユーザと一致するフィールド」
with :Reserve.phpにgourmetsというリレーションを定義、nameというカラムのみを取得
with('gourmets:name')
nameカラムのみを取得したいのであれば、nameのみ書けばいいじゃんと思いますが、必ずidカラムの取得は必要なようです。
whereInメソッド
whereIn(検索対象のカラム,配列)
配列内と一致する値があれば、自動的にそのフィールドを取得してくれます。
複数フィールドを取得されるので、非常に便利です。
私はなるべくイケてるコードを書きたいので、賢そうなコードを書くように心がけています(笑)