😀

Laravel Eloquent ORMでデータを取得するときの注意点

2022/03/22に公開

はじめに

laravelでデータベースからデータを取得し、そのデータを利用しようとした時にうまく扱えなかったので、整理も含めて記載していきます。
ここでは、laravelのEloquentでのデータ取得に絞って記載します。

Eloquent ORMとは

Eloquent ORMはLaravelに含まれている、美しくシンプルなアクティブレコードによるデーター操作の実装です。それぞれのデータベーステーブルは関連する「モデル」と結びついています。モデルによりテーブル中のデータをクエリできますし、さらに新しいレコードを追加することもできます。
Laravel 5.7 Eloquent:利用の開始

Eloquentが複数のレコードをリターンする場合Illuminate\Database\Eloquent\Collectionオブジェクトが返されます
Laravel 5.7 Eloquent:コレクション

つまり、

  • EloquentはlaravelのORM(オブジェクト関係マッピング)
  • laravelでデータベースを操作できるようにしている
  • 返されるデータはコレクション型である
use Illuminate\Database\Eloquent\Model;

class Test extends Model

上記のように記載したモデルによって、データベース操作を簡単な記述で行うことができる。

コレクション型とは

Laravel独自の型。(オブジェクト型の一種)
データベースからデータを取得した際等はこの型。
コレクションで利用可能なメソッドは全部で100個以上あります。メソッドチェーンで記述が可能です。
つまり、

  • DBから取得したデータを簡単に操作できる型
  • オブジェクト型と同じ = 配列型ではないという事

データを取得する時に気をつけること

  • 取得されるデータは基本的にはコレクション型である
    • これが大事。取得したデータを、すぐに配列のように操作しようとしてうまくデータが取り出せないことが起こる。それもそのはず。取得されるデータがコレクション型であった。
  • そのコレクション型を配列に変換することができる
    - Eloquentには様々なメソッドがあり、特定のメソッドを使うことで、コレクション型を配列に変換することができる。使えるメソッドは公式HPを見ればわかる。

さいごに

クエリビルダとEloquentは異なる

Laravelのデータ取得方法は主に上記の二つを使うことになるが、
そもそも上記の二つは似てるようで違う。
この記述は別で記載するが、そもそも別であることの認識を持っておくことが大事。
調べても混乱していた原因は、コレクション型と配列の違い、クエリビルダとEloquentの違いを認識していなかった為でした。

Discussion