0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Laravel Eloquent 不要なデータは取得しないようにしよう!

Posted at

現在、Laravelの使用経験が半年を越えた学生エンジニアです。

Laraelには非常に便利な「Eloquent ORM」という非常に便利な概念が存在します。
主に以下のような解釈ができると思います。

  1. SQLの簡略化
  2. データベースへのインターフェース

ざっくりとご説明したいと思います。

「Eloquent ORM」と「Model」

LaravelはMVCモデルと呼ばれています。

Model View Controllerの略です。

  1. Modelを用いてテーブルからデータ取得
  2. Controllerを用いてデータを処理
  3. Viewで処理されたデータを表示

上記の流れで運用されるためです。(厳密にはもっとたくさんありますが!)

上記の1の工程がModelですが、
Eloquent ORM と Modelはほぼ同義と考えて構いません

では実際に効率的に書いていきましょう!

なるべく不要な値を取得しない

 $attendances = Attendance::all();

まず、Attendanceモデルですが、私が勤怠管理のwebアプリケーションを作成した際のモデル名です。
attendancesテーブルにある全ての値を取得するという処理です。

全てが必要ならば問題ありませんが、「全部取得しておけば、問題ないだろう」という理由ならば、このような記述はやめましょう!

  1. パフォーマンスが悪い
  2. イケてないコードになる

どうせならイケてるコード書きましょうよ!

イケてる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(検索対象のカラム,配列)

配列内と一致する値があれば、自動的にそのフィールドを取得してくれます。
複数フィールドを取得されるので、非常に便利です。

私はなるべくイケてるコードを書きたいので、賢そうなコードを書くように心がけています(笑)

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?