Laravelにはデータベースからデータを取りだすための色々な方法があります。
よく使う all,get, find, first, pluck, where, whereIn の7個の方法を解説します。
メソッド | 機能 | 備考 |
all | 全て取得 | |
find | 指定したキーの要素だけ取得 | |
first | 指定したキーの最初の要素だけ取得 | |
get | 指定したキーのすべての要素を取得 | all()と同じ。また他のメソッドと組み合わせられる |
pluck | 指定したカラム(列)の要素を取得 | |
where | 条件を指定して、フィルタをかける | getなどとセットで使う |
whereIn | 条件を指定する際に、【含まれる】値でフィルタをかける | getなどとセットで使う |
データベースから、欲しいデータをさくさく取ってきましょー♪
なお、本記事作成にあたりLaravel8を使用しております。
知っておくべきデータを取り出す7つの基本メソッド【初心者のLaravel入門講座】
それでは7個のメソッドを紹介していきます。
なお使用するモデルクラスについて、コントローラー上部にUse宣言を入れておきましょう。
Laravel8では、app/Modelsフォルダの中にモデルファイルが作成されます。
そのため、モデルクラスを次のように記述します。
1 |
use App\Models\User; |
それではここから、メソッドを紹介していきます。
all()ですべて取得
all() を使うと、クラスに基づくテーブルのすべての要素を取得できます。
一覧リストを作ったりするときに便利です。
【コントローラー例】
1 2 |
$users=User::all(); return view('user.index', compact('users')); |
コードの意味
userクラスの要素を取得し、$users変数に格納。
ビューファイルを表示するとき、$users変数も受け渡す。
【ビューファイル例】
1 2 3 4 5 6 7 8 |
@foreach($users as $user) <table> <tr> <td>{{$user->name}}</td> <td>{{$user->email}}</td> </tr> </table> @endforeach |
ビューファイルで変数を使うときには、{{$変数名}}とします。
変数が複数ある場合は、@foreachを使うと、ひとつずつ取り出せます。
foreachは本当によく使います!
get() ですべて取得
get() を使うと、テーブルのすべての要素を取得できます。
【コントローラー例】
1 2 |
$users=User::get(); return view('user.index', compact('users')); |
コードの意味
userクラスの要素を取得し、$users変数に格納。
ビューファイルを表示するとき、$users変数も受け渡す。
getは上記だとall()と同じ機能です。
ただ他にも、whereなど色々なメソッドに組み合わせたりもできて、活用の場が多いメソッド。
後ほど、whereを説明する際に例をお見せします。
find() で指定した要素を取得
指定した1個だけ要素を取得したい、という時は、find()を使います。
今ログインしているユーザーの要素を取ってきたい、という場合にはこちら。
【コントローラー例】
1 2 3 |
$auth=auth()->user()->id; $user=User::find($auth); return view('home', compact('user')); |
コードの意味
$authは、認証したユーザーのidとする。
userクラステーブルから、idカラムが$authと同じデータを取得し、$user変数に格納。
ビューファイルを表示するとき、$user変数も受け渡す。
【ビューファイル例】
1 |
{{$user->name}}さん、ようこそ! |
上記のようにすると、ビューファイルにユーザーの名前を表示できます。
first() で最初の要素を取得
なんでもよいから最初の1個だけ要素を取得したい、という場合には、firstを使います。
【コントローラー例】
1 2 |
$user=User::first(); return view('user.index', compact('user')); |
コードの意味
userクラスのテーブルから最初の値を取得し、$user変数に格納。
ビューファイルを表示するとき、$user変数も受け渡す。
【ビューファイル例】
1 2 3 4 5 6 |
<table> <tr> <td>{{$user->name}}</td> <td>{{$user->email}}</td> </tr> </table> |
pluck() で特定のカラムの要素を取得
特定のカラム(列)のデータだけ必要、という場合には、pluck()が使えます。
【コントローラー例】
1 2 |
$users=User::pluck('name'); return view('user.index', compact('users')); |
コードの意味
userクラスのテーブルからnameカラムの値を取得し、$users変数に格納。
ビューファイルを表示するとき、$users変数も受け渡す。
【ビューファイル例】
1 2 3 |
@foreach($users as $user) {{$user}} @endforeach |
where()で条件を指定する
「特定のユーザーIDに対応するメールアドレスがほしい」など、条件が明確なときは whereが便利です。
たとえば、「今ログインしているユーザーのデータを取得したい」という場合は、下記のようにします。
【コントローラー例】
1 2 3 |
$auth=auth()->user()->id; $user=User::where('id', $auth)->get(); return view('user.index', compact('user')); |
コードの意味
$authは、認証したユーザーのidとする。
userクラステーブルから、idカラムが$authと同じデータを取得し、$user変数に格納。
ビューファイルを表示するとき、$user変数も受け渡す。
【ビューファイル例】(ユーザー名表示)
1 2 3 |
@foreach($user as $u) {{$u->name}} @endforeach |
whereで取得した値を使うには、上記のようにget()などを組み合わせる必要があります。
whereIn()で条件を指定する
where()には色々なバリエーションがあります。
たとえば「完全一致ではなく、指定した値が含まれているデータを取ってきてほしい」場合には、whereIn()というメソッドが使えます。
下記は「電話番号に【0】か【1】が入るユーザーを取ってくる」というコードになります。
【コントローラー例】
1 2 |
$users=User::whereIn('phone', [0, 1])->get(); return view('user.index', compact('users')); |
コードの意味
userクラスのテーブルから、[phone]カラムに0か1が含まれるユーザーを取得。
$user変数に格納。
ビューファイルを表示するとき、$user変数も受け渡す。
【ビューファイル例】(ユーザー名表示)
1 2 3 |
@foreach($users as $user) {{$user->name}} @endforeach |
whereInは、条件を配列の形で指定する必要があるので、書き方に注意してください。
さいごに
7個のメソッドを紹介しました。
これだけで基本はOKですが、他にも最大値や最小値を返してくれたり、アイテムの数を返してくれるメソッドなど、色々なことができます。
「こんなことできないかな」と思ったら、公式マニュアルも検索してみてください。
125個もメソッドが紹介されているので、ご要望に合うものもあるのではないかと思います。
探すの大変ですが^^;
ちなみにクエリビルダとEloquentの違いは、こちらの記事に載っています。