今回は、LaravelのクエリビルダおよびEloquentがどんな形式でデータを返しているのかを調べてみました。
具体的には、クエリビルダについては「get」と「first」、Eloquentについては、「get」「first」「all」「find」についてそれぞれ調べました。
「Laravelのクエリビルダ・Eloquentってどんな形式でデータを返してるの?」と疑問に思っている方の参考になれば幸いです。
【Laravel】クエリビルダ・Eloquentで取得するデータの形式を調べてみた
まずは、クエリビルダの「get」で取得する方法と「first」で取得する方法について、それぞれの返すデータの形式を調べます。
まずはgetからです。
【Laravel】クエリビルダでgetが返すデータの形式
以下のようにデータを作成した上で、クエリビルダのgetを使ってデータを取得してみました。
/** @test */ public function クエリビルダのgetで値を取得() { User::create([ 'name' => 'test君', 'email' => 'test@example.com', 'password' => 'password', ]); var_dump(DB::table('users')->get()); }
結果はこちら。
取得したデータがコレクションに包まれていることが分かります。
コレクションとは、Laravelに用意されているラッパーで、データをコレクションで包む(ラップする)ことで、様々なデータ操作が容易にできるようになります。
詳しい説明はLaravelの公式に書かれてあるので参考にしてみて下さい。
【Laravel】クエリビルダでfirstが返すデータの形式
次に、クエリビルダのfirstを使ってデータを取得してみました。
/** @test */ public function クエリビルダのfirstで値を取得() { User::create([ 'name' => 'test君', 'email' => 'test@example.com', 'password' => 'password', ]); var_dump(DB::table('users')->first()); }
結果はこちら。
取得したデータはstdClassに包まれています。
stdClassとは、PHPに標準で用意されている空のクラスです。メソッドやプロパティなどは何も定義されていません。
自由にプロパティとしてデータを格納することができるため、データを配列ではなくオブジェクトとして扱いたい場合に使用されます。
今回は、このstdClassのプロパティとして、データベースに格納したユーザー情報が返却されています。
そのため、例えば以下のようにstdClassのプロパティにアクセスすることで、自由にデータを取り出すことも可能です。
DB::table('users')->first()->name
【Laravel】Eloquentでgetが返すデータの形式
次に、Eloquetのが返すデータの形式についてです。まずはgetの場合を実験してみました。
/** @test */ public function Eloquentのgetで値を取得() { $user = User::create([ 'name' => 'test君', 'email' => 'test@example.com', 'password' => 'password', ]); var_dump(User::get()); }
結果はこちら。
コレクションで包まれています。
getの場合は、クエリビルダでもEloquentでもコレクションで返ってくることが分かりました。(中身がstdClassかモデルクラスかの違いはありますが)
【Laravel】Eloquentでfirstが返すデータの形式
次に、Eloquentでfirstを指定した場合です。
/** @test */ public function Eloquentのfirstで値を取得() { $user = User::create([ 'name' => 'test君', 'email' => 'test@example.com', 'password' => 'password', ]); var_dump(User::first()); }
結果はこちら。
Eloquentのモデルクラスで包まれています。
ここでクエリビルダとの差異が発現しました。
firstでデータを取得した場合、クエリビルダではstdClassに包まれてデータが返ってきますが、Eloquentの場合はモデルクラスに包まれて返ってきます。
【Laravel】Eloquentでallが返すデータの形式
次に、Eloquentのallでデータを取得しました。
/** @test */ public function Eloquentのallで値を取得() { $user = User::create([ 'name' => 'test君', 'email' => 'test@example.com', 'password' => 'password', ]); var_dump(User::all()); }
結果はこちら。
コレクションで包まれています。
allの場合はコレクションに包まれてデータが返ってくることが分かりました。
【Laravel】Eloquentでfindが返すデータの形式
最後に、Eloquentのfindでデータを取得しました。
/** @test */ public function Eloquentのfindで値を取得() { $user = User::create([ 'name' => 'test君', 'email' => 'test@example.com', 'password' => 'password', ]); var_dump(User::find($user->id)); }
結果はこちら。
モデルクラス形式でデータが返ってきています。
【まとめ】クエリビルダ・Eloquentが返すデータの形式【Laravel】
今回の検証結果をまとめます。
まずは、クエリビルダの場合です。
- get -> コレクション
- first -> stdClass
次に、Eloquentの場合です。
- get -> コレクション
- first -> モデルクラス
- all -> コレクション
- find -> モデルクラス
返ってくるデータの形式によってデータの扱い方は変わります。
クエリビルダやEloquentでデータを取得する際は、「どんな形式でデータが返っているのか」はしっかりと意識するようにしましょう。
今回は以上となります。
この記事が少しでも、あなたがLaravelについて理解を深めるための一助となっていれば幸いです。